JVM 故障诊断常用工具之 jstack
利用该工具可以查询指定JVM进程中的各个线程状态、线程调用栈信息以及线程死锁检测,常常用于检测是否死锁并打印出和死锁相关的线程信息。jstack相关参数说明如下:
默认
打印各个线程的状态、锁竞争状态、调用栈信息
如果线程之间存在死锁,在输出结果底部会打印出涉及死锁的相关线程信息,如下所示
-l
命令格式:jstack -l <pid> ,除了和默认输出结果一样外,还会打印出每个线程所持有的锁信息,如下所示
注:只有这个线程所持有的锁是AbstractOwnableSynchronizer的子类,才会打印持有的锁信息,synchronized锁不会打印锁信息,具体详解见检查死锁与Locked ownable synchronizers
-F
当使用jstack <pid> 没有响应时,使用该命令,可以强制进行 thread dump
参考文章