排查Java程序CPU占用原因
排查Java程序CPU占用原因
1.排查JAVA程序CPU占用高的原因
一、找到进程ID
TOP
二、找到Java高占用线程ID
ps -mp <进程ID> -o THREAD,tid | sort -r
如果占用CPU高的线程没有id,说明是主线程,可能是OOM导致的GC,排查是否存在
gc overhead异常或分析dump包
三、线程ID转16进制
printf "%x\n" 25905<线程ID>
四、查找堆栈信息
jstack <进程ID> |grep <16进制线程ID> -A 50
2.导出并分析dump包
导出dump包
-
自动导出:增加jvm启动参数
-XX:HeapDumpPath=/opt/gc/xxx.dump -XX:+HeapDumpOnOutOfMemoryError -
手动导出:
jmap -dump:live,format=b,file=/opt/gc/heap.dump <进程ID>
利用jhat分析dump包
- 启动jhat服务:
jhat -port 7000 /opt/gc/heap.dump - 访问web地址:http://127.0.0.1:7000,查看类实例直方图 http://localhost:7000/histo/ 分析哪个实例最多。

浙公网安备 33010602011771号