前言
jstack命令可以定位到JAVA线程的堆栈信息,常用的调试命令如ps,top,printf,jstack,jinfo,jmap,jps,grep,jstat等,本文将示例如何查找JAVA进程中耗CPU过多的问题定位方法。
定位线程
查找进程ID
运用命令ps -ef|grep java|grep appName
,得出如下图所示。
定位线程
- 从上面得出PID为32174,接下来使用如下命令可以得到耗时较高的具体线程。
1,ps -Lfp pid
2,ps -mp pid -o THREAD, tid, time
3,top -Hp pid
使用第三条命令查找得出结果哪下
从以上可以看出耗时最高的线程PID为32604。
- 查找出来的PID是用十进制表示的,需要使用命令
printf "%x\n" 32604
将其转换为十六进制为7f5c
,因为jstack导出的线程堆栈是用十六制表的 - 定位到具体的代码位置,使用命令
jstack 32551|grep 7f5c
,得到如下信息
总结
好了,通过以上几步基本上可以定位到代码级别的位置了,在此也只是略表记录,更多的小技巧之类的继续总结。