先用top命令找出CPU佔比最高的進程
進一步定位
jps -l
或者
ps -ef|grep java|grep -v grep
定位到具體的線程或者代碼
ps -mp 進程id -o THREAD,tid,time
如:
ps -mp 25754 -o THREAD,tid,time
- -m 顯示所有的線程
- -p pid進程使用 CPU 的時間
- -o 該參數後是用戶自定義格式
將線程ID轉換爲16進制格式
英文小寫格式
上圖有問題的線程Id轉成16進制:
十進制 | 十六進制 |
---|---|
25755 | 649b |
jstack 進程ID | grep 16進制的線程ID -A60
-A60 表示前60行
jstack 25754 | grep 649b -A60
成功找到問題所在了,該類第14行附近