排查Java进程CPU占有率高

最近尝试在项目中利用com.sun.management.OperatingSystemMXBean增加些调试信息,发现测试环境Java进程CPU占有率很高,Google后总结一些解决过程。

1.根据top命令,发现占有率高的Java的PID。

1
#top

2.找到该PID后,首先显示线程列表,并按照CPU占用高的线程排序。

1
#ps -mp $PID -o THREAD,tid,time | sort -rn

3.然后找到耗时最多的线程TID,将需要的TID转换为16进制格式。

1
#printf "%x\n" $TID

4.打印线程的堆栈信息。

1
#jstack $PID |grep $0xTID -A 30