jstack

本文深入解析jstack工具的高级用法,包括如何通过不同选项获取Java应用的线程堆栈信息,如混合模式堆栈跟踪、锁详情及线程状态分析。特别关注线程的死锁、等待资源、等待获取监视器等状态,以及如何处理jstack无法输出的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-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,会直接输出到控制台日志中

公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值