本文基於HotSpot虛擬機器,JDK版本1.8.0_171,windows系統
目錄
一、jps:虛擬機器程式狀況工具 二、jstat:虛擬機器統計資訊監視工具 三、jmap:Java記憶體映像工具 四、jhat:虛擬機器堆轉儲快照分析工具 五、jstack:Java堆疊跟蹤工具 六、jinfo:Java配置資訊工具
java和javac這兩個命令列工具我們應該都很熟悉,但是除了這兩個工具jdk/bin裡面還提供了很多工具給我們使用,今天就簡單介紹有關虛擬機器監控且助於故障排查的工具。
實際上這些工具大多數就是jdk/lib/tool.jar的封裝,內部就是呼叫tool裡面的內容,所以工具體積都不大,而且在linux版本的jdk中有些工具就是用shell寫的。1.jps(JVM Process Status Tool)
用於顯示指定系統內所有HotSpot虛擬機器程式,並且能顯示虛擬機器執行主類以及本地虛擬機器唯一ID(LVMID,Local Virtual Machine Identifier)功能單一,但是其他因為其他工具都需要指明LVMID(來確定要監控的虛擬機器程式,所以都需要用到它。對於本地的虛擬機器程式來說LVMID和作業系統的程式ID一致。
使用格式:jps [options] [hostid]
jps可以通過RMI協議查詢遠端開啟RMI服務的虛擬機器程式,hostid為RMI登錄檔中註冊的主機名。
2.jstat(JVM Statistics Monitoring Tool)
用於監視虛擬機器各種執行狀態資訊的工具,可以顯示本地或者遠端的虛擬機器程式類裝載、記憶體、GC、JIT等執行資料,在沒有GUI影像介面的伺服器上,主要就是用它在執行期定位效能問題。
使用格式 :jstat [option vmid [interval [s|ms] [count]] ]
interval
表示查詢的間隔, s|ms
是秒和毫秒(預設是毫秒,即不寫單位是毫秒),count
表示查詢的次數。
樣例:表示每5秒鐘檢視一次LVMID為34216的虛擬機器程式的GC情況,一共查詢10次
3.jmap (Memory Map for Java)
用於生成堆轉儲快照(heapdump或dump檔案),說白了就是把java堆使用情況快照一份匯出來供我們檢視,用來排查問題。
使用格式 :jmap [option] vmid
4.jhat (JVM Heap Analysis Tool)
這個就是和jmap搭配使用的,jmap匯出來的堆快照檔案用jhat 開啟分析
使用格式: jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>
樣例:
檢視分析結果5.jstack (Stack Trace for Java)
用於生成虛擬機器當前時刻執行緒快照(threaddump或javacore)。主要用來定位執行緒出現長時間停頓的原因,判斷死鎖啊,死迴圈的等。通過jstack就可知各執行緒的呼叫堆疊情況。
使用格式:jstack [option] vmid
樣例:
6.jinfo (Configuration Info for Java)
用來檢視和調整虛擬機器各項引數
使用格式:jinfo [option] pid
可以通過-flag[+|-] name 新增和刪除一些引數,或者-flag name =value修改一些引數,但是很多引數是不允許修改的
樣例:結語
本文主要是簡單介紹常見的幾個JDK命令列工具,建議使用的時候自己通過命令 -option
檢視每個選項實際的意思再使用,畢竟這麼選項一般也記不住。而且這些工具有一些算比較簡陋了例如jhat ,這玩意分析的簡陋,介面也簡陋不夠強大和專業。所以這些個命令列工具以瞭解和大概明白其作用為主。
像平日裡一般用於分析都用JConsole、VisualVM(All-in-One Java Troubleshooting Tool)這種視覺化工具來分析故障監控效能等,有些在IDE裡面的也有用MAT等工具分析。
本文參考《深入理解JAVA虛擬機器》第四章
如有錯誤歡迎指正!
個人公眾號:yes的練級攻略
有相關面試進階(分散式、效能調優、經典書籍pdf)資料等待領取