38、JVM实战:工具:jstack

26.6–工具–jstack


1、介绍

1、 用于生成java虚拟机当前时刻的线程快照;
2、 线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合;
3、 生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等;
4、 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源;
5、 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的javastack和nativestack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题;
6、 jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的javastack和nativestack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的;

2、语法

2.1、格式

jstack [ option ] pid

 

2.2、参数说明

2.2.1、option

-F:当正常输出请求不被响应时,强制输出线程栈堆。

-l:除线程栈堆外,显示关于锁的附加信息。

-m:如果调用本地方法的话,可以显示c/c++的栈堆

2.3、测试

jstack -l 10088

*