JPSE问题诊断指导七——jstack功能

jstack命令行功能附着到指定的进程或者core文件上面打印所有附着到VM上面的线程的堆栈,包括Java线程和VM内部线程以及可选的本地栈帧,该功能也能够执行死锁检测。

该功能也能够用jsadebugd后台进程查询远程机器上面的进程或者core文件。需要注意这种情况下的输出打印非常长。

全部线程的堆栈信息对诊断许多问题都有用,例如死锁或者悬挂。

-l 选项指示该功能去查找堆中可拥有的同步块并且打印java.util.concurrent.locks的信息。没有这个选项的话,线程dump只包含监视信息。

jstack pid option 的输出和通过应用控制台按下ctrl + \或者发送QUIT信号给进程获得的输出一样。

线程dump也可以通过编程方式获得:使用Thread.getAllStackTraces方法,或者在调试器中庸调试选项打印所有线程堆栈。

强制堆栈dump

如果jstack pid命令由于进程挂起而不响应了,那么可以使用-F选项(仅针对Oracle Solaris和Linux可用)强制dump,jstack -F pid。

从core dump中打印堆栈

要从core dump中获取堆栈信息,可以在core文件上面执行jstack命令,像下面这样

jstack $JAVA_HOME/bin/java core

打印混合堆栈

jstack功能也能打印混合堆栈信息,就是说它除了能打印java堆栈外还能打印本地堆栈,本地帧是关联到VM的c/c++帧和JNI/native代码。

jstack -m pid

以星号作为前缀的是Java帧,没有的话则是本地c/c++帧。



转载于:https://my.oschina.net/codefire/blog/373550

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值