JVM監控工具:jps、jstat、jinfo、jmap、jhat、j

karspb發表於2021-09-09

一、jps(JVM Process Status Tools)

jps是參照Unix系統的取名規則命名的,而他的功能和ps的功能類似,可以列舉正在執行的餓虛擬機器程式並顯示虛擬機器執行的主類以及這些程式的唯一ID(LVMID,對應本機來說和PID相同),他的用法如下:

jps [option] [hostid]

其中hostid預設為本機,而option選項包含以下選項

Option Function
-q 只輸出LVMID
-m 輸出JVM啟動時傳給主類的方法
-l 輸出主類的全名,如果是Jar則輸出jar的路徑
-v 輸出JVM的啟動引數

二、jstat(JVM Statistics Monitoring Tools)

jstat主要用於監控虛擬機器的各種執行狀態資訊,如類的裝載、記憶體、垃圾回收、JIT編譯器等,在沒有GUI的伺服器上,這款工具是首選的一款監控工具。其用法如下:

jstat [option vmid [interval [s|ms] [vount] ] ]

引數interval和count分別表示查詢間隔和查詢次數,如每1毫秒查詢一次程式20445的垃圾回收情況,監控20次,命令如下所示:

jstat –gc 20445 1 20

相關的輸出引數介紹可參照官方的說明(注:網址連結請)

選項option代表使用者需要查詢的虛擬機器的資訊,主要分為3類:類裝載、垃圾回收和執行期的編譯情況,具體如下表所示:

Option Function
-class 監視類的裝載、解除安裝數量以及類的裝載總空間和耗費時間等
-gc 監視Java堆,包含eden、2個survivor區、old區和永久帶區域的容量、已用空間、GC時間合計等資訊
-gccapcity 監視內容與-gc相同,但輸出主要關注Java區域用到的最大和最小空間
-gcutil 監視內容與-gc相同,但輸出主要關注已使用空間佔總空間的百分比
-gccause 與-gcutil輸出資訊相同,額外輸出導致上次GC產生的原因
-gcnew 監控新生代的GC情況
-gcnewcapacity 與-gcnew監控資訊相同,輸出主要關注使用到的最大和最小空間
-gcold 監控老生代的GC情況
-gcoldcapacity 與-gcold監控資訊相同,輸出主要關注使用到的最大和最小空間
-gcpermcapacity 輸出永久帶用到的最大和最小空間
-compiler 輸出JIT編譯器編譯過的方法、耗時資訊
-printcompilation 輸出已經被JIT編譯的方法

三、jinfo(JVM configuration Info for Java)

Jinfo的作用是實時檢視虛擬機器的各項引數資訊jps –v可以檢視虛擬機器在啟動時被顯式指定的引數資訊,但是如果你想知道預設的一些引數資訊呢?除了去查詢對應的資料以外,jinfo就顯得很重要了。jinfo的用法如下:

Jinfo [option] pid

如 jinfo –sysprops {pid}

四、jmap(JVM Memory Map for Java)

jmap用於生成堆快照(heapdump)。當然我們有很多方法可以取到對應的dump資訊,如我們透過JVM啟動時加入啟動引數 –XX:HeapDumpOnOutOfMemoryError引數,可以讓JVM在出現記憶體溢位錯誤的時候自動生成dump檔案,亦可以透過-XX:HeapDumpOnCtrlBreak引數,在執行時使用ctrl+break按鍵生成dump檔案,當然我們也可以使用kill -3 pid的方式去恐嚇JVM生成dump檔案。jmap的作用不僅僅是為了獲取dump檔案,還可以用於查詢finalize執行佇列、Java堆和永久帶的詳細資訊,如空間使用率、垃圾回收器等。其執行格式如下:

jmap [option] vmip

Option的資訊如下表所示

Option Function
-dump 生成對應的dump資訊,用法為-dump:[live,]format=b,file={fileName}
-finalizerinfo 顯示在F-Queue中等待的Finalizer方法的物件(只在linux下生效)
-heap 顯示堆的詳細資訊、垃圾回收器資訊、引數配置、分代詳情等
-histo 顯示堆疊中的物件的統計資訊,包含類、例項數量和合計容量
-permstat 以ClassLoder為統計口徑顯示永久帶的記憶體狀態
-F 當虛擬機器對-dump無響應時可使用這個選項強制生成dump快照

示例:jmap -dump:format=b,file=heap.dump 20445

五、jhat(JVM Heap Analysis Tool)

jhat是用來分析dump檔案的一個微型的HTTP/HTML伺服器,它能將生成的dump檔案生成線上的HTML檔案,讓我們可以透過瀏覽器進行查閱,然而實際中我們很少使用這個工具,因為一般伺服器上設定的堆、棧記憶體都比較大,生成的dump也比較大,直接用jhat容易造成記憶體溢位,而是我們大部分會將對應的檔案複製下來,透過其他視覺化的工具進行分析。啟用法如下:

jhat {dump_file}

執行命令後,我們看到系統開始讀取這段dump資訊,當系統提示Server is ready的時候,使用者可以透過在瀏覽器鍵入進行查詢。

六、jstack(JVM Stack Trace for java)

jstack用於JVM當前時刻的執行緒快照,又稱threaddump檔案,它是JVM當前每一條執行緒正在執行的堆疊資訊的集合。生成執行緒快照的主要目的是為了定位執行緒出現長時間停頓的原因,如執行緒死鎖、死迴圈、請求外部時長過長導致執行緒停頓的原因。透過jstack我們就可以知道哪些程式在後臺做些什麼?在等待什麼資源等!其執行格式如下:

jstack [option] vmid

相關的option和function如下表所示

Option Function
-F 當正常輸出的請求不響應時強制輸出執行緒堆疊
-l 除堆疊資訊外,顯示關於鎖的附加資訊
-m 顯示native方法的堆疊資訊

示例:jstack -l 20445

原文連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2001/viewspace-2805630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章