问题起因:
java工程消费的内容延迟严重,发现负责消费的dispatcher 进程阻塞,且占用的CPU%很高。
开始按照https://www.cnblogs.com/paul8339/p/7464206.html 文中提到的方法排查。
一、追查
重点:
如果java进程在docker下执行,需要进入docker里边执行下面的步骤,否则会报错:
Unable to open socket file: target process not responding or HotSpot VM not loaded
第一步:先获取到需要排查的进程PID
查询前十个消耗CPU做多的进程命令:
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
获取java进程的资源消费情况:
ps -ef | grep java
第二步:获取线程信息,找到耗CPU的线程
ps -mp pid -o THREAD,tid,time | sort -rn 6
第三步:打印线程的堆栈信息
先将需要的线程ID转换为16进制格式
printf "%x\n" tid
jstack pid |grep tid -A 30
踩坑1:
我们的工程运行在docker环境下,需要进入docker下执行前两步,否则在执行jstack的时候报错:
Error attaching to process: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process)
sun.jvm.hotspot.debugger.DebuggerException: Doesn't appear to be a HotSpot VM (could