1. 程式人生 > >線上問題排查:cpu100%

線上問題排查:cpu100%

簡單記錄下排查過程

1.top找到tomcat程序

2.假設把cpu吃滿的tomcat程序pid是20172,ps -mp 20172 -o THREAD,tid,time檢視執行緒情況,找到把cpu吃滿的執行緒

3.上圖中的TID需要轉成16進位制,可以用printf  "%x\n",假設把cpu吃滿的TheaddId為20174

4.然後用jstack 20172|grep 4ece -A 30命令dump執行緒,20172是程序PID,4ece是16進位制的TID,注意jstack需在java/bin目錄下執行。

可以看到執行緒狀態,一般有:unnable(正在執行)、waiting for monitor(主動等待)、waiting for monitor entry(死鎖)

死鎖需要額外注意,由於執行緒是動態變化的,可以每隔30秒dump一次。

但如果是線上問題,需要迅速解決問題,最直接的就是kill重啟,這時需要先記錄執行緒堆疊日誌,恢復線上生產後再查詢問題。可以先記錄CPU100%的TID,再使用jstack pid > 20180919.log匯出堆疊日誌,後續再根據執行緒TID查詢問題點,注意這裡的TID也是16進位制的。