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檔案來對比分析。
格式:

參數解析:
-l 列印關于鎖的附加資訊
-m 列印所有棧資訊,也即同時輸出java和本地堆棧(混合模式)
-F 當jstack -l pid無響應時候強制列印線程堆棧資訊
2、操作
(1)jsack -m :列印所有棧資訊,也即同時輸出java和本地堆棧(混合模式)
(2)-l 列印關于鎖的附加資訊
(3)-F 當jstack -l pid無響應時候強制列印線程堆棧資訊