jstack命令簡介
jstack(Java Virtual Machine Stack Trace)是JDK提供的一個可以生成Java虛擬機當前時刻的執行緒快照資訊的命令列工具,執行緒快照一般被稱為threaddump或者javacore檔案,是當前Java虛擬機中每個執行緒正在執行的Java執行緒、虛擬機內部執行緒和可選的本地方法堆疊幀的集合,對于每個方法堆疊幀,將會顯示完整的類名、方法名、位元組碼索引(bytecode index,BCI)和行號,生成的執行緒快照可以用于定位執行緒出現長時間停頓的原因,比如:執行緒間死鎖、死回圈、請求外部資源被長時間掛起等等,
jstack命令引數
命令語法:
jstack [options] pid
命令引數說明:
option:jstack命令的可選引數,如果沒有指定這個引數,jstack命令會顯示Java虛擬機當前時刻的執行緒快照資訊,如下圖:

pid:要列印配置資訊的Java虛擬機的行程ID,
想要要獲取運行的Java虛擬機行程的串列,可以使用ps命令(Linux系統中)或tasklist命令(Windows系統中),如果Java虛擬機行程沒有在單獨的docker實體中運行,可以使用jps命令,
option都有哪些引數呢?我們來看一下,
-F引數
如果Java虛擬機行程由于行程掛起而沒有任何回應,那么可以使用-F引數(僅在Oracle Solaris和Linux作業系統上游戲)強制顯示執行緒快照資訊,
比如:

-l引數
如果使用-l引數,除了方法堆疊幀以外,jstack命令還會顯示關于鎖的附加資訊,比如屬于java.util.concurrent的ownable synchronizers串列,
比如:

-m引數
如果使用-m引數,jstack命令將顯示混合的堆疊幀資訊,除了Java方法堆疊幀以外,還有本地方法堆疊幀,本地方法堆疊幀是C或C++撰寫的虛擬機代碼或JNI/native代碼,
比如:

在顯示結果中,以星號為前綴的幀是Java方法堆疊幀,而不以星號為前綴的是本地方法堆疊幀,比如:

-h 和 -help
顯示jstack命令的幫助資訊,
結尾
雖然jstack命令已經推出很久并且使用頻率比較搞,但它仍然是一個“實驗性質的,并且沒有技術支持的”(Experimental and Unsupported)工具,日后可能會被轉正,也有可能在某個JDK版本中無聲無息地消失,所以,且用且珍惜吧,
不過,我們還可以使用Thread.getAllStackTracesgetAll()方法,獲取Java虛擬機中所有執行緒的StackTraceElement物件,進而獲得所有執行緒堆疊幀資訊,
最后,謝謝你這么帥,還給我點贊和關注,
微信公眾號:萬貓學社
微信掃描二維碼
關注后回復「電子書」
獲取12本Java必讀技術書籍
作者:萬貓學社
出處:http://www.cnblogs.com/heihaozi/
著作權宣告:本文遵循 CC 4.0 BY-NC-SA 著作權協議,轉載請附上原文出處鏈接和本宣告,
微信掃描二維碼,關注萬貓學社,回復「電子書」,免費獲取12本Java必讀技術書籍,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/445863.html
標籤:Java
