Jstack
jstack是JVM自带的Java堆栈跟踪工具,它用于打印出给定的java进程ID
、core file、远程调试服务的Java堆栈信息
,用于生成虚拟机当前时刻的线程快照
。
一般情况下线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源,会不会发生线程间死锁、死循环、请求外部资源导致的长时间等待等问题。
jstack [option] <pid> // 打印某个进程的堆栈信息
jstack -l <pid> // 除堆栈外,增加显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况
Jstack dump 日志文件需要重点关注线程状态为:
- deadlock,死锁(重点关注)
- blocked,线程被阻塞 (重点关注),最常见的情况是请求锁
- waiting for monitor entry 等待获取监视器(重点关注)
- waiting on condition,等待资源(重点