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\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

 

posted @ 2017-12-26 17:45  彩笔杀手  阅读(3718)  评论(0编辑  收藏  举报