鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

调优过程

前提条件

  • 服务器和操作系统正常运行。
  • PC端已经安装SSH远程登录工具。
  • 需要优化的Java程序。

操作步骤

实践使用demo请参考testdemo

  1. 进行在线分析。

    在概览页签下发现程序的CPU负载一直比较高。

    图1 在线分析-概览

    需要确认程序具体事项,或者是否有热点函数在执行。

  2. 进行采样分析。

    采样时长可以设置长一点。

    图2 创建采样分析
  3. 查看采样分析结果。
    图3 采样分析-概览

    查看概览页签,从CPU的利用率上可以看出,用户态占较多,说明CPU主要执行java代码。

    如果内核态占较多,说明CPU更多的执行系统相关的的操作。

  4. 查看CPU页签的方法采样结果。

    从java方法采样的火焰图可以看出在采样期间,程序的方法采样主要落在两个函数调用处,可以间接反映出CPU消耗在这两个函数的时间会比较多。

    图4 采样分析-火焰图

    查看具体信息,通过函数的全限定名称可以辨别发现的两个函数是用户的自研代码。

    图5 采样分析-反火焰图

    图类型切换到调用树,可以发现跟火焰图一样的结果,采样主要落在两个函数。

    图6 采样分析-CPU-调用树
  5. 问题分析。

    根据火焰图和调用树提供的热点函数的类的全限定名称,去代码中搜索对应的函数,进而分析业务逻辑。

    实际用户程序的方法火焰图会比较复杂,需要用户逐步找出需要的目标函数。

总结

Java中的热点函数定位,主要通过函数火焰图去定位,然后通过火焰图提供的类的全限定名去搜索业务代码,进而进行代码的优化。

在进行其他程序调优时,需要根据鲲鹏DevKit Java性能分析工具采集的实际结果和对应的优化建议进行调优操作,调优思路可以参考本次实践。