排查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包

  1. 启动jhat服务:jhat -port 7000 /opt/gc/heap.dump
  2. 访问web地址:http://127.0.0.1:7000,查看类实例直方图 http://localhost:7000/histo/ 分析哪个实例最多。

posted @ 2023-12-14 22:34  安浩阳  阅读(20)  评论(0)    收藏  举报