本文目錄一覽:
怎樣使用jstack診斷Java應用程序故障
,jstack 是一個可以返回在應用程序上運行的各種各樣線程的一個完整轉儲的實用程序,
jstack命令詳解是什麼?
jstack用於列印出給定的java進程ID或corefile或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項”-J-d64″,Windows的jstack使用方式只支持以下的這種方式:
命令格式
jstack[option]pid
jstack[option]executablecore
jstack[option][server-id@]remote-hostname-or-IP
用法結構:
[root@wwwwangxiaoxiao]#jstack
Usage:
jstack[-l]pid
jstack-F[-m][-l]pid
Options:
-F強制dump線程堆棧信息.用於進程hung住,jstackpid命令沒有響應的情況
-m同時列印java和本地(native)線程棧信息,m是mixedmode的簡寫
-l列印鎖的額外信息
linux怎麼安裝jstack工具?
jstack用於列印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息。
如果是在64位機器上,需要指定選項”-J-d64″,Windows的jstack使用方式只支持以下的這種方式:jstack [-l] pid
如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕鬆地知道java程序是如何崩潰和在程序何處發生問題。
另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。
l 不同的 JAVA虛機的線程 DUMP的創建方法和文件格式是不一樣的,不同的 JVM版本, dump信息也有差別。
l 在實際運行中,往往一次 dump的信息,還不足以確認問題。建議產生三次 dump信息,如果每次 dump都指向同一個問題,我們才確定問題的典型性。
命令格式
$jstack [ option ] pid
$jstack [ option ] executable core
$jstack [ option ] [server-id@]remote-hostname-or-IP
pid: java應用程序的進程號,一般可以通過jps來獲得
executable:產生core dump的java可執行程序
core:列印出的core文件
remote-hostname-or-ip:遠程debug伺服器的名稱或IP
server-id: 唯一id,假如一台主機上多個遠程debug服務
jstack的使用
通過jstack,我們可以輕鬆得知jvm中各個線程的工作情況.
利用ps -aux 找出我們的java線程41,然後再用jstack -l 41,就可以查看jvm此刻運行的所有線程.
下面是截取的兩個jvm運行的普通線程,一個是守護線程,另外一個是用戶線程.
守護線程 守護線程是指給程序提供通用性支持的線程,他不屬於程序,gc就是一個很稱職的守護線程.守護線程是為用戶線程提供服務的,也就是說如果沒有用戶線程,守護線程就沒有存活下去的意義,在jstack中查出來的線程信息中,守護線程有個 daemon 的標誌
用戶線程 用戶線程通常是程序自己開啟的.jvm會隨著所有的用戶程序關閉而關閉
在下面的線程信息中 :
① HikariPool-1 connection closer 是線程的名字,在Java中可以通過Thread.currentThread().getName()來查看線程名字
② prio 應該是線程的優先順序
③ tid jvm中的線程id
③ nid tid映射的操作系統中的線程id,非常有用,不過這裡是用16進位的表示, 可以通過 printf “%x\n” 十進位數字 查找一個十進位數字的十六進位表示
④ 0x00007fa735a2a000 線程棧的起始地址
⑤ TIMED_WAITING 線程狀態
⑥ 0x00000006e941b160 資源名稱,等待某個資源被釋放,說明有其他線程鎖住了該資源,一般是 locked 0x00000006e941b160
線程狀態
假如java進程經常出現卡慢,cpu經常會爆滿,這時候我們考慮一下是否是我們某些線程太佔cpu,導致其他線程不能好好工作.可以通過以下步驟觀察
linux怎麼安裝jstack工具
jstack用於列印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息。
如果是在64位機器上,需要指定選項”-J-d64″,Windows的jstack使用方式只支持以下的這種方式:jstack [-l] pid
如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕鬆地知道java程序是如何崩潰和在程序何處發生問題。
另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。
l 不同的 JAVA虛機的線程 DUMP的創建方法和文件格式是不一樣的,不同的 JVM版本, dump信息也有差別。
l 在實際運行中,往往一次 dump的信息,還不足以確認問題。建議產生三次 dump信息,如果每次 dump都指向同一個問題,我們才確定問題的典型性。
命令格式
$jstack [ option ] pid
$jstack [ option ] executable core
$jstack [ option ] [server-id@]remote-hostname-or-IP
pid: java應用程序的進程號,一般可以通過jps來獲得
executable:產生core dump的java可執行程序
core:列印出的core文件
remote-hostname-or-ip:遠程debug伺服器的名稱或IP
server-id: 唯一id,假如一台主機上多個遠程debug服務
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/272408.html