一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环

排查故障如下:

1、根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障

java应用高cpu占用-LMLPHP

2、通过ps aux|grep <pid>命令,可以进一步确定是tomcat进程出现了问题
3、显示线程列表: ps -mp <pid> -o THREAD,tid,time

  找到了耗时最高的线程28802,占用CPU时间快两个小时了!

java应用高cpu占用-LMLPHP

4、将需要的线程ID转换为16进制格式:printf "%x\n" tid

java应用高cpu占用-LMLPHP

5、最后打印线程的堆栈信息: jstack pid |grep tid -A 30

java应用高cpu占用-LMLPHP

找到出现问题的代码了!
现在来分析下具体的代码:ShortSocketIO.readBytes(ShortSocketIO.java:106)

04-21 13:22