jstack是jdk自带的很强大的线程分析工具,可以帮助我们排查程序运行时的线程状态、死锁状态,jdk中同时自带的工具还有jps,jinfo,Jstack,jstat,jmap,jhat等。这里我是整理一下jstack的使用,如何帮助我们排查线上线程问题。
命令格式,如下,
jstack [-l] pid
在dump文件里,值得关注的线程状态有:
- 死锁,Deadlock(重点关注) 。
- 执行中,Runnable。
- 等待资源,Waiting on condition(重点关注)。
- 等待获取监视器,Waiting on monitor entry(重点关注)。
- 暂停,Suspended。
- 对象等待中,Object.wait() 或 TIMED_WAITING。
- 阻塞,Blocked(重点关注)。
- 停止,Parked。
如下截取的一段dump日志,
"pool-2-thread-6" #18 prio=5 os_prio=0 tid=0x00