当前位置: 首页 > 工具软件 > OpenJ9 > 使用案例 >

【Java】如何分析OpenJ9 JVM CPU占用高问题?

充培
2023-12-01

1.找到OpenJ9 JVM所在进程的进程号PID

命令行中输入top命令,找到jvm所在的pid

2.使用kill -3 {pid} 生成打印进程当前状态各个线程的堆栈信息

kill -3 {pid}
每隔几分钟打印一次,通过多次收集,然后分析判断稳定占用的是那个功能。
生成的堆栈文件路径可能要看看,每个jvm运行生成的位置不固定。
执行一次该命令后,一次会生成2个文件,后缀是.phd和.txt
phd后缀的是内存文件,txt后缀的是线程堆栈文件。
pdh后缀的文件用于分析内存情况。
txt后缀的文件用于分析CPU情况。

3.使用工具分析CPU使用情况

步骤1:使用jca457.jar 工具分析线程堆栈 ,运行方法:java -jar jca457.jar
步骤2:打开txt线程堆栈文件
步骤3:在jca457.jar gui界面的上面的快捷tools图标区域中,选择”CPU Usage Analysis“,找到对应的占用CPU大的线程名称。
可以看到CPU的占用情况的饼图,分析其中占用较大的进程
步骤4:在jca457.jar gui界面的上面的快捷tools图标区域中,选择”Thread Status Analysis“,在下方的线程名称列表中找到对应的线程名称,点击一下,可以在右方的位置看到具体对应的调用代码。
步骤5:找到具体调用的代码的堆栈信息后,分析是否是正常占用还是异常占用。

4.如果是PaaS微服务运行的话,docker cp命令会用上

该方法同样适用在docker容器中的场景,不过docker打印堆栈后,要在宿主环境上使用docker cp拷贝文件,然后通过scp ftp等方式取文件到本地。

5.如果要分析内存占用情况

使用工具分析 kill -3 产生的phd文件,工具可以使用常用的内存分析工具。

6.编码的时候,注意对线程进行命名,提升易读性。

 类似资料: