如何排查CPU佔用100%

線上後臺報警CPU佔用100%,CPU佔用過高,本文介紹一下如何排查CPU佔用過高原因。

步驟1. top

輸入top命令,找到佔用CPU最高的程序。按Shift P鍵排序:

可以看到CPU佔用最高的pid是92129。

步驟2. top -Hp pid

檢視指定程序內執行緒資訊,其中pid是第一步的pid。

top -Hp 92129

找到佔用最高的執行緒pid為92156,然後轉成十六進位制,使用公式轉換:

printf '%x' 92156

輸出結果是:167fc

步驟3. jstack 命令

使用jstack命令分析程序狀態,為了方便查詢,將分析結果輸入到一個檔案中,jstack pid > x.txt其中pid是步驟1的程序號。

jstack 92129 > x.txt

開啟x.txt檔案,在檔案中查詢步驟2轉換的十六進位制數:

找到非Jdk程式碼,也是自己寫的程式碼,就能找到問題的根源了。

總結

  • top 找到程序號
  • top -Hp 程序號,找到執行緒號,執行緒轉成十六進位制。
  • jstack pid 分析。根據十六進位制查詢,找到問題程式碼位置。