jstack工具的使用

 

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

  1. jstack [ options ] pid
  2.  jstack [ options ] executable core
  3.  jstack [ options ] [ server-id@ ] remote-hostname-or-IP
  4.  #options : 命令行选项。
  5.  #pid : 堆栈跟踪打印的进程ID。
  6.  #executable : 从中生成核心转储的Java可执行文件。
  7.  #core : 要打印堆栈跟踪的核心文件。
  8.  #remote-hostname-or-IP : 远程调试服务器主机名或IP地址。
  9.  #server-id : 多个调试服务器在同一个远程主机上运行时使用的可选唯一标识。

option参数:

  1. -F #当jstack [-l] pid没有响应时强制堆栈转储。
  2.  -l #除堆栈外,显示关于锁的附加信息。
  3.  -m #打印具有Java和本机C/C++框架的混合模式堆栈跟踪。
  4.  -h/-help #打印帮助说明

jstack -l 5840|more

  

 

 想要通过jstack命令来分析线程的情况的话,首先要知道线程都有哪些状态,下面这些状态是我们使用jstack命令查看线程堆栈信息时可能会看到的线程的几种状态: 

  NEW,未启动的。不会出现在Dump中。

  RUNNABLE,在虚拟机内执行的。

  BLOCKED,受阻塞并等待监视器锁。

  WATING,无限期等待另一个线程执行特定操作。

  TIMED_WATING,有时限的等待另一个线程的特定操作。

  TERMINATED,已退出的。

posted on 2021-03-25 17:58  Michael0931  阅读(77)  评论(0)    收藏  举报