性能有关问题定位-Linux 下定位java应用cpu高的原因

性能问题定位--Linux 下定位java应用cpu高的原因

在Linux下,java应用cpu占用很高的时候,我们需要知道此时的应用到底在做什么导致资源的消耗。

以方便我们进一步定位和优化~

 

1、查询cpu消耗top5的进程

[root@iZm5e4f4148n4lrswxxxxxx ~]#  ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=-%cpu | head -5

性能有关问题定位-Linux 下定位java应用cpu高的原因

 

可以看到上面TID为19551的cpu占用是第一的;

TID为24989的Java应用cpu占用排第二;

 

2、将线程ID转换为16进制格式

 [root@iZm5e4f4148n4lrswxxxxxx ~]# printf "%x\n" 24989

性能有关问题定位-Linux 下定位java应用cpu高的原因

命令格式:printf "%x\n" tid

 

3、根据线程ID打印堆栈信息

 [root@iZm5e4f4148n4lrsww9kymZ ~]#  jstack 24981 |grep 0x619d -A 30

 命令格式:jstack pid |grep 0xtid -A 30

性能有关问题定位-Linux 下定位java应用cpu高的原因

 

有堆栈信息后,就可以明确的知道,此时此刻是什么在消耗cpu资源了。

说明:

1.示例服务本身没问题;

2.此方法与使用JMX监控方法的结果一致。