天天看點

JDK自帶工具jstack使用簡析

jstack是JDK自帶的一款分析java線程代碼棧的工具.使用它可以很友善的找到耗費cpu或者導緻死鎖的代碼.

jstack不但可以分析本地一個java程序,也可以分析遠端主機上的java程序,還可以分析已生成的java core檔案.

我認為,三個功能中最有用的是分析本地java程序.其餘兩個則不必要熟悉,既然有遠端主機的通路權限,直接登入主機豈不更友善. 而java core檔案如果生成的話,現在已有很多免費的界面化的分析工具可供選擇,又何必勞神用這個,而jstack本身也就是生成core檔案然後再人工分析,是以用jstack分析一個java core檔案也不是那麼必要需要熟練掌握,大可點到為止.

參數的意思: -F當’jstack [-l] pid’沒有相應的時候強制列印棧資訊

-l長清單. 列印關于鎖的附加資訊,例如屬于java.util.concurrent的ownable synchronizers清單.

-m列印java和native c/c++架構的所有棧資訊.

例如: jstack pid >1.log jstack -l pid >1.log jstack -F pid >1.log jstack -m pid >1.log

在輸出的檔案裡,甚至可以直接看到是否存在死鎖,是不是很強大哈.比如: Attaching to process ID 978, please wait... Debugger attached successfully. Server compiler detected. JVM version is 16.0-b10 Deadlock Detection:   No deadlocks found.