CPU 100%問題排查總結

排查思路


【1】定位高負載進程 pid:登錄進服務器使用 top命令[ps 命令]查看當前CPU消耗過高的進程,從而得到進程id。觀察各個進程資源使用情況,可以看出進程id爲18571的進程,有着較高的CPU佔比。

定位具體的異常業務使用 pwdx pid 命令[查看當前 pid進程啓動時的工作目錄]根據 pid 找到業務進程路徑,進而定位到負責人和項目。

【2】根據 Pid查出消耗 cpu最高的線程號:top -Hp  18571,按下P,進程按照 Cpu使用率排序。找出最耗 Cpu的線程,結果發現18584是就耗了99.9%。一般超過80%就是比較高的,80%左右是合理情況。這樣我們就能得到CPU消耗比較高的線程id。

將十進制轉化爲十六進制printf "0x%x\n" 18584

【3】根據線程號查出對應的 java線程:jstack 18571| vim +/0x4898 - 查看線程的堆棧信息。也可以通過 jstack -l 18571 > ./18571.stack 將線程的信息導出到 18571.statck 文件。然後執行,grep命令,看線程0x4898 做了什麼 。cat 18571.stack | grep '0x4898' -C 8 查看文件中線程的堆棧信息。這裏我們就可以區分導致 CPU過高的原因具體是 Full GC次數過多還是代碼中有比較耗時的計算了。如果是Full GC次數過多,那麼通過 jstack得到的線程信息會是類似於VM Thread之類的線程,而如果是代碼中有比較耗時的計算,那麼我們得到的就是一個線程的具體堆棧信息[如下]。

----如果喜歡,點個  紅心♡  支持以下,謝謝----