Java程序運行時佔用CPU過高問題的排查

爲了模擬出CPU佔用過高的問題,特地寫了一個死循環的簡單測試程序。如下

 

在CentOS上編譯執行。

#javac TestDeadLoop.java

#java TestDeadLoop

用top命令找到CPU佔用過高的進程ID。

#top

可以看到現在總的%CPU:34.4us。

PID爲26932的java進程的%CPU達到了101.0%。

用ps -aux | grep pid

可以看到這個java進程就是java TestDeadLoop。

進一步用 ps -mp 26932 -o THREAD,tid,time | sort -rn命令
查看是哪個線程佔用cpu過高。

可以看到TID爲26944的線程的%CPU達到了97.2%.

先將將線程ID轉換爲16進制數。

[root@test_host ~]# printf "%x\n" 26944
6940

然後用jstack找到罪魁禍首。

可以看到問題出在TestDeadLock.java的第14行。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章