问题:生产服务器上部署了几个java程序,忽然出现了CPU100%的异常告警,你如何定位出问题呢?html
下面给出两种系统下的排查步骤,都是如出一辙的,只是命令稍有区别!java
查消耗cpu最高的进程PID服务器
根据PID查出消耗cpu最高的线程号spa
根据线程号查出对应的java线程,进行处理。线程
准备一行死循环代码:code
public class run (){ public static void main (String args[]){ int count = 0; while (count < 1) { count = count * 10; } }
怎么跑,应该不用我说了,直接教你们怎么查!htm
Linux版本,步骤是如出一辙的,就是命令换了一下blog
执行命令排序
执行top -c
,显示进程运行信息列表。按下P,进程按照cpu使用率排序进程
以下图所示,PID为3033的进程耗费cpu最高
执行命令
top -Hp 3033
,显示一个进程的线程运行信息列表。按下P,进程按照cpu使用率排序
以下图所示,PID为3034的线程耗费cpu最高
这是十进制的数据,转成十六进制为0xbda
执行命令,导出进程快照
jstack -l 3033 > ./3033.stack
而后执行,grep命令,看线程0xbda
作了什么
cat 3033.stack |grep 'bda' -C 8
输出以下
至此定位到问题