jstack工具的使用
jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
-
jstack [ options ] pid
-
jstack [ options ] executable core
-
jstack [ options ] [ server-id@ ] remote-hostname-or-IP
-
#options : 命令行选项。
-
#pid : 堆栈跟踪打印的进程ID。
-
#executable : 从中生成核心转储的Java可执行文件。
-
#core : 要打印堆栈跟踪的核心文件。
-
#remote-hostname-or-IP : 远程调试服务器主机名或IP地址。
-
#server-id : 多个调试服务器在同一个远程主机上运行时使用的可选唯一标识。
option参数:
-
-F #当jstack [-l] pid没有响应时强制堆栈转储。
-
-l #除堆栈外,显示关于锁的附加信息。
-
-m #打印具有Java和本机C/C++框架的混合模式堆栈跟踪。
-
-h/-help #打印帮助说明
jstack -l 5840|more

想要通过jstack命令来分析线程的情况的话,首先要知道线程都有哪些状态,下面这些状态是我们使用jstack命令查看线程堆栈信息时可能会看到的线程的几种状态:
NEW,未启动的。不会出现在Dump中。
RUNNABLE,在虚拟机内执行的。
BLOCKED,受阻塞并等待监视器锁。
WATING,无限期等待另一个线程执行特定操作。
TIMED_WATING,有时限的等待另一个线程的特定操作。
TERMINATED,已退出的。
浙公网安备 33010602011771号