JVM调优jstack找出最耗cpu的线程&定位问题代码

JVM调优jstack找出最耗cpu的线程&定位问题代码

一、服务器环境

jdk1.8 有多个tomcat容器运行java程序

二、用到的命令

top、printf、jstack、grep

三、排查过程

  1. 用top查出哪个java进程最消耗cpu命令:top 如下图
    JVM调优jstack找出最耗cpu的线程&定位问题代码这三个指标可以看出进程PID为87010的进程很消耗资源

  2. 根据进程87010查出哪个线程最消耗cpu命令:top -Hp 87010 如下图 JVM调优jstack找出最耗cpu的线程&定位问题代码通过上图三个指标可以看出线程90255比较消耗资源,TIME列就是各个Java线程耗费的CPU时间。

  3. printf “%x\n” 90255 得到一个16进制的数值 1608f
    4.jstack 87010|grep 1608f,它用来输出进程90255的堆栈信息,然后根据线程ID的十六进制值grep,如下:
    JVM调优jstack找出最耗cpu的线程&定位问题代码可以看出是线程池ThreadPoolExecutor的问题,ok问题定位到了。


我爱你
为了找你
我搬进了鸟的眼睛里
我注视着风的方向
却忘记了猎人的枪响