性能有关问题定位-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
可以看到上面TID为19551的cpu占用是第一的;
TID为24989的Java应用cpu占用排第二;
2、将线程ID转换为16进制格式
[root@iZm5e4f4148n4lrswxxxxxx ~]# printf "%x\n" 24989
命令格式:printf "%x\n" tid
3、根据线程ID打印堆栈信息
[root@iZm5e4f4148n4lrsww9kymZ ~]# jstack 24981 |grep 0x619d -A 30
命令格式:jstack pid |grep 0xtid -A 30
有堆栈信息后,就可以明确的知道,此时此刻是什么在消耗cpu资源了。
说明:
1.示例服务本身没问题;
2.此方法与使用JMX监控方法的结果一致。