一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环
排查故障如下:
1、根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障
2、通过ps aux|grep <pid>命令,可以进一步确定是tomcat进程出现了问题
3、显示线程列表: ps -mp <pid> -o THREAD,tid,time
找到了耗时最高的线程28802,占用CPU时间快两个小时了!
4、将需要的线程ID转换为16进制格式:printf "%x " tid
5、最后打印线程的堆栈信息: jstack pid |grep tid -A 30
找到出现问题的代码了!
现在来分析下具体的代码:ShortSocketIO.readBytes(ShortSocketIO.java:106)