JVM监控命令之——JSTACK

1、简介

      stack trace,用于打印java线程的调用栈(执行栈,瞬时),包括class全名、方法名、行号等,如果指定-m还会打印native帧;不过对于实际工作情况,我们通常用于追踪多线程任务调度过程、对象lock(或者死锁)、并发同步阻塞、IO线程执行状态等;比如排查某个线程为何wait(假死,阻塞等)。

      也即是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的core文件中的stack信息。

      jstack命令最大的作用就是用来生成thread dump文件,thread dump文件中记录了某一时刻CPU信息,例如线程执行到哪个类中的哪个方法上以及现在的线程状态。分析线程状态对JVM调优意义重大,比如在某个方法阻塞,等待等。由于thread dump记录的是某一时刻的CPU信息,所以一般调优时候需要间隔10s左右输出两三份thread dump文件来对比分析。

      格式:

JVM监控命令之——JSTACK

参数解析:

-l  打印关于锁的附加信息

-m  打印所有栈信息,也即同时输出java和本地堆栈(混合模式)

-F  当jstack -l  pid无响应时候强制打印线程堆栈信息

 

2、操作

(1)jsack -m :打印所有栈信息,也即同时输出java和本地堆栈(混合模式)

JVM监控命令之——JSTACK

(2)-l  打印关于锁的附加信息

JVM监控命令之——JSTACK

(3)-F  当jstack -l  pid无响应时候强制打印线程堆栈信息