基于DevKit Java性能分析工具的调优实践——热点函数定位
发表于 2025/12/29
0
1 调优概述
鲲鹏DevKit是一款提供涵盖迁移、测试、性能调优及系统诊断等各环节的开发使能工具集。其中,DevKit Java性能分析工具是针对基于鲲鹏的服务器上运行的Java程序的性能分析和优化工具,能图形化显示Java程序的堆、线程、锁、垃圾回收等信息,收集热点函数、定位程序瓶颈点,帮助用户采取针对性优化。本文使用Java性能优化工具对运行中的Java程序进行在线分析和采样分析,定位热点函数,并根据分析结果进行优化修改,从而实现Java程序最佳运行。
2 环境要求
|
项目 |
说明 |
|
服务器 |
TaiShan 200 服务器(型号2280) |
|
CPU |
Kunpeng 920 |
|
OS |
CentOS 7.6 |
|
调优工具 |
Kunpeng DevKit Java性能分析工具 |
3 前提条件
- 服务器和操作系统正常运行。
- PC端已经安装SSH远程登录工具
- 需要优化的Java程序
4 调优思路
- 使用Java性能优化工具对Java进程进行在线分析;
- 使用Java性能优化工具对Java进程进行采样分析
- 针对性能的瓶颈点进行性能优化;
- 观察优化后的Java程序,判断问题是否解决
5 调优过程
5.1 对程序进行在线分析,在概览页签下发现程序的CPU负载一直比较高

这时候想知道程序具体在做什么事情,或者是否有热点函数在执行。
5.2 对程序进行采样分析,采样时长可以设置长一点

5.3 打开采样分析报告->概览页签
从CPU的利用率上可以看出,JVM用户态占大头,说明cpu主要执行java代码。
如果用户态占大头,说明cpu更多的执行系统相关的操作

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

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

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

5.5 发现问题并解决
根据火焰图和调用树提供的热点函数的类的全限定名称,去代码中搜索对应的函数,进而分析业务逻辑。实际用户程序的方法火焰图会比较复杂,需要用户去一步一步找出自己想要的目标函数。
6 实践总结
Java中的热点函数定位,主要通过函数火焰图去定位,然后通过火焰图提供的类的全限定名去搜索业务代码,进而进行代码的优化。
在进行其他程序调优时,需要根据鲲鹏DevKit性能优化工具采集分析的实际结果和对应的优化建议进行调优操作。具体的调优思路可以参考本次实践。


