如何排查CPU佔用太高
阿新 • • 發佈:2020-07-07
線上專案執行時,出現問題不像在本地那麼容易排查,經常需要藉助日誌、或者一些工具來找出問題。cpu被佔滿我們經常會遇到。比如我們有這樣一段程式碼:
public Class Demo1_16 { public static void main(String[] args) { new Thread(null, () -> {
System.out.println("...");
while(true) { }
}, "thread1").start;
}
}
具體排查方法就是:
- top 命令定位程式,比如圖中32655程式佔用了97.
- 接著可以用 "ps H -eo pid, tid, %cpu | grep 程式id" 命令定位具體執行緒
- 最後用jvm命令 "jstack 程式id" ,根據執行緒id找到有問題的執行緒(10進位制轉換為16進位制),具體到原始碼行數。"thread3"這樣開頭的是我們自己寫的程式,其他樣式的是虛擬機器器執行緒,名稱是固定的。
接著要將程式id轉換為16進位制,比如 32655 --> 0x7f99,也就是 “thread1”,具體到第8行程式碼有問題, 就是while死迴圈的問題。