1、java定位進程java
在服務器中終端輸入命令:top服務器
能夠看到進程ID,爲5421的cpu這列100多了。spa
記下這個數字:5421線程
而後在服務器中終端輸入命令:top -Hp 5421blog
做用是查看里程內部線程資源佔用狀況。5421爲第二步獲取到的進程id進程
能夠看到第一行cpu佔用特別高,就是它了。記住,此時第一列PID是線程ID:5463資源
注意這個ID是十進制,可是java線程堆棧是採用是16進制。那麼咱們轉換一下。循環
printf "%x\n" 5463終端
輸出結果:grep
1557
如今咱們須要用到以前的進程ID(5421)和線程的16進制數字(1557)。
在服務器中終端輸入命令:jstack -l 5421|grep 1557 -C 8
可看到線程處於運行狀態,代碼在BugDemoController類的17行,也就是咱們的循環所在行。
這裏解釋一下grep後頁-C 8意思是顯示查找目標行的先後8行,不加的話就只有一行,可能一時看不出問題來。
固然你也能夠更改一下:
-A 8後8行
-B 8前8行
PS:本例方法也可用於排查線上死鎖問題。