給你的Java程式拍個片子吧:jstack命令解析
阿新 • • 發佈:2020-05-11
## 前言
如果有一天,你的Java程式長時間停頓,也許是它病了,需要用jstack拍個片子分析分析,才能診斷具體什麼病症,是死鎖綜合徵,還是死迴圈等其他病症,本文我們一起來學習jstack命令~
- jstack 的功能
- jstack用法
- 執行緒狀態等基礎回顧
- 實戰案例1:jstack 分析死鎖
- 實戰案例2:jstack 分析CPU 過高
## jstack 的功能
jstack是JVM自帶的Java堆疊跟蹤工具,它用於打印出給定的java程序ID、core file、遠端除錯服務的Java堆疊資訊.
```
jstack prints Java stack traces of Java threads for a given Java process or
core file or a remote debug server.
```
> - jstack命令用於生成虛擬機器當前時刻的執行緒快照。
> - 執行緒快照是當前虛擬機器內每一條執行緒正在執行的方法堆疊的集合,生成執行緒快照的主要目的是定位執行緒出現長時間停頓的原因,
如執行緒間死鎖、死迴圈、請求外部資源導致的長時間等待等問題。
> - 執行緒出現停頓的時候通過jstack來檢視各個執行緒的呼叫堆疊,就可以知道沒有響應的執行緒到底在後臺做什麼事情,或者等待什麼資源。
> - 如果java程式崩潰生成core檔案,jstack工具可以用來獲得core檔案的java stack和native stack的資訊,從而可以輕鬆地知道java程式是如何崩潰和在程式何處發生問題。
> - 另外,jstack工具還可以附屬到正在執行的java程式中,看到當時執行的java程式的java stack和native stack的資訊, 如果現在執行的java程式呈現hung的狀態,jstack是非常有用的。
## jstack用法
**jstack 命令格式如下**
```
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP
```
- executable Java executable from which the core dump was produced.(可能是產生core dump的java可執行程式)
- core 將被列印資訊的core dump檔案
- remote-hostname-or-IP 遠端debug服務的主機名或ip
- server-id 唯一id,假如一臺主機上多個遠端debug服務
**最常用的是**
```
jstack [