命令行中输入top命令,找到jvm所在的pid
kill -3 {pid}
每隔几分钟打印一次,通过多次收集,然后分析判断稳定占用的是那个功能。
生成的堆栈文件路径可能要看看,每个jvm运行生成的位置不固定。
执行一次该命令后,一次会生成2个文件,后缀是.phd和.txt
phd后缀的是内存文件,txt后缀的是线程堆栈文件。
pdh后缀的文件用于分析内存情况。
txt后缀的文件用于分析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:找到具体调用的代码的堆栈信息后,分析是否是正常占用还是异常占用。
该方法同样适用在docker容器中的场景,不过docker打印堆栈后,要在宿主环境上使用docker cp拷贝文件,然后通过scp ftp等方式取文件到本地。
使用工具分析 kill -3 产生的phd文件,工具可以使用常用的内存分析工具。