使用场景:
遇到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 " 322
printf "%x " 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