调优过程
前提条件
- 服务器和操作系统正常运行。
- PC端已经安装SSH远程登录工具。
- 需要优化的Java程序。
操作步骤
- 进行在线分析。
在概览页签下发现程序的CPU负载一直比较高。
图1 在线分析-概览需要确认程序具体事项,或者是否有热点函数在执行。
- 进行采样分析。
采样时长可以设置长一点。
图2 创建采样分析 - 查看采样分析结果。图3 采样分析-概览
查看概览页签,从CPU的利用率上可以看出,用户态占较多,说明CPU主要执行java代码。
如果内核态占较多,说明CPU更多的执行系统相关的的操作。
- 查看CPU页签的方法采样结果。
从java方法采样的火焰图可以看出在采样期间,程序的方法采样主要落在两个函数调用处,可以间接反映出CPU消耗在这两个函数的时间会比较多。
图4 采样分析-火焰图查看具体信息,通过函数的全限定名称可以辨别发现的两个函数是用户的自研代码。
图5 采样分析-反火焰图图类型切换到调用树,可以发现跟火焰图一样的结果,采样主要落在两个函数。
图6 采样分析-CPU-调用树 - 问题分析。
根据火焰图和调用树提供的热点函数的类的全限定名称,去代码中搜索对应的函数,进而分析业务逻辑。
实际用户程序的方法火焰图会比较复杂,需要用户逐步找出需要的目标函数。
总结
Java中的热点函数定位,主要通过函数火焰图去定位,然后通过火焰图提供的类的全限定名去搜索业务代码,进而进行代码的优化。
在进行其他程序调优时,需要根据鲲鹏DevKit Java性能分析工具采集的实际结果和对应的优化建议进行调优操作,调优思路可以参考本次实践。
父主题: 实践3:热点函数定位调优实践