天天看點

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無響應時候強制列印線程堆棧資訊

jvm