排查CPU佔用高的代碼
1. 編寫代碼
public class Demo { public static void main(String[] args) { System.err.println("測試開始"); while(true){ } } }
編寫一個死循環代碼。
執行此代碼
2.找到CPU佔用率高的進程
我們可以觀察到top查看cpu佔用高的進程。
找到cpu佔用率爲 100%的線程。
3.導出執行堆棧
jstack 3417 >> java.txt
3417 爲進程號
4.查佔用率高的線程
top -H -p 3417
找到線程號 爲3418
5.轉換16進制
printf "%x\n" 3418
執行後 爲 d5a
6.在之前導出的堆棧文件查找
查找d5a
"main" #1 prio=5 os_prio=0 tid=0x00007f3ef804b000 nid=0xd5a runnable [0x00007f3efef94000] java.lang.Thread.State: RUNNABLE at Demo.main(Demo.java:4)
發現是我們的Demo第四行出了問題,這樣找回源碼,去掉死循環即可。