問題:生產服務器上部署了幾個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
輸出以下
至此定位到問題