-F: Force a stack dump when jstack [-l] pid does not respond.
-l: Long listing. Prints additional information about locks such as a list of owned java.util.concurrent ownable synchronizers. See the AbstractOwnableSynchronizer class description at
http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/AbstractOwnableSynchronizer.html
-m: Prints a mixed mode stack trace that has both Java and native C/C++ frames.
jstack输出文件里,值得关注的线程状态(java.lang.Thread.State)有:
死锁, Deadlock (重点关注)
执行中,Runnable
等待资源,Waiting on condition(重点关注)
等待获取监视器,Waiting on monitor entry(重点关注)
暂停,Suspended
对象等待中,Object.wait() 或 TIMED_WAITING
阻塞,Blocked(重点关注,只有synchronized这种方式的锁(monitor锁)才会让线程出现BLOCKED状态,等待ReentrantLock则不会)
停止,Parked(LockSupport两组方法park/parkNanos/parkUntil,使用带参数Object blocker的,jstack输出中会显示更详细的线程信息)
使用示例如下
jstack -l [pid] > /home/[pid].log
有时候jstack不能输出,可以使用kill -3,会直接输出到控制台日志中
公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢