1. 程式人生 > 實用技巧 >如何排查CPU佔用太高

如何排查CPU佔用太高

 線上專案執行時,出現問題不像在本地那麼容易排查,經常需要藉助日誌、或者一些工具來找出問題。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死迴圈的問題。