java虚拟机之 jstack 命令

一、概念

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

二、语法

         jstack [ option ] pid

         jstack [ option ] executable core

        jstack [ option ] [[email protected]]remote-hostname-or-IP

常用参数说明

1)、options: 

      executable Java executable from which the core dump was produced.(可能是产生core dump的java可执行程序)

     core 将被打印信息的core dump文件

    remote-hostname-or-IP 远程debug服务的主机名或ip

     server-id 唯一id,假如一台主机上多个远程debug服务 

2)、基本参数:

    -F 当’jstack [-l] pid’没有相应的时候强制打印栈信息

    -l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

    -m 打印java和native c/c++框架的所有栈信息.

    -h | -help打印帮助信息

    pid 需要被打印配置信息的java进程id,可以用jps查询.

三、示例

1、输出当前进程的堆栈信息 : jstack -l 2626

2626 既是pid 可以通过ps -ef|grep java 或者 jps -ml 获得

java虚拟机之 jstack 命令

2、将当前的进程输出到文件上:jstack -l 2626 >> test.log

可以将进程的堆栈输出到日志,然后下载到本地排查问题。

 

场景:jvm调优 ,尤其在查看阻塞、死锁等问题上

 

学习地址:

https://www.cnblogs.com/taiguyiba/p/9470861.html

https://blog.****.net/fenglibing/article/details/6411940