Linux 下定位java应用 cpu高的原因(转)

使用场景:

遇到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

原文地址:https://www.cnblogs.com/lxs1314/p/8119254.html