使用場景:
遇到Linux下java應用cpu占用很高的時候,我們很想知道此時的應用到底在做什么導致資源的消耗。
方便我們進一步定位和優化~
1、查詢cpu耗用top5的進程(你也可以top10)
[root@FATD00013672 ~]# ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=-%cpu | head -5
可以看到上面TID為322的cpu占用是第一的。
2、將線程ID轉換為16進制格式
[root@FATD00013672 ~]# printf "%x\n" 322
printf "%x\n" tid
3、打印線程ID堆棧信息
[root@FATD00013672 ~]# jstack 43 |grep 0x142 -A 30
jstack pid |grep 0xtid -A 30
有堆棧信息后,就可以明確的知道,此時此刻就是這個東東在消耗cpu資源
**********************************
BTW:此方法驗證和使用JMX監控方法的結果一致
(說明:示例服務本身沒什么問題)
原文鏈接地址:https://zhuanlan.zhihu.com/p/28174686