天天看點

JVM學習筆記(四)虛拟機監控與故障處理工具

目前有許多分析JVM程式的工具,首先就是jdk本身提供的基本分析工具如jmap、jconsole、VisualVM等,此外還有一些第三方工具如基于eclipse的MAT。分析工具對于JVM程式優化有着舉足輕重的作用。

jdk提供的工具

以下内容參考周志明老師著述:《深入了解Java虛拟機》第二版。

首先來看下基于文本的JVM相關工具:

JVM學習筆記(四)虛拟機監控與故障處理工具

其實作在已經有許多更好的工具作為替代,但在linux的指令行控制界面下還是會比較多的用到上述工具。

如下對幾個個人認為重要的工具進行展開copy

1 Jps

可能在linux下開發時用的比較多就是jps了,其對應有如下參數:

JVM學習筆記(四)虛拟機監控與故障處理工具

2 Jstat

其可以監控JVM運作時狀态資訊,比如說GC情況,詳細參數用法如下:

JVM學習筆記(四)虛拟機監控與故障處理工具

案例:在此假設每個1000毫秒查詢已使用空間占用百分比,一共查詢20次:

jstat -gcutil 12444 1000 20

JVM學習筆記(四)虛拟機監控與故障處理工具

3 Jmap

用于生成堆轉儲快照檔案的工具,主要用法如下:

jmap [option] vmid
           
JVM學習筆記(四)虛拟機監控與故障處理工具

如在此生成sts(pid=12444)的運作dump檔案并将其存放在E:\jmap檔案夾下 :

jmap -dump:format=b,file=E:\jmap\eclipse.bin 12444
           

4 Jstack

可用于定位線程長時間停頓問題,如死鎖、外部資源請求、死循環等。通過jstack檢視各個線程堆棧調用情況即可知道線程在背景的工作情況,以此進行問題定位。詳細用法參數如下:

JVM學習筆記(四)虛拟機監控與故障處理工具

除了上述幾個基于文本的分析工具外,jdk還提供了兩個可視化工具:jconsole、VisualVM。

兩款工具皆作為jdk的正式成員。

5 jconsole

先來看看jconsole,直接在控制台敲入jconsole pid或打開jconsole進行遠端連接配接JVM程序即可監控對應程序的狀态資訊,包括JVM記憶體使用情況、GC相關資訊、線程執行個體等。

根據大佬純潔的微笑部落格:jvm系列(七):jvm調優-工具篇

如果監控遠端服務需要在tomcat啟動腳本中添加如下代碼:
-Dcom.sun.management.jmxremote.port=6969  
 -Dcom.sun.management.jmxremote.ssl=false  
 -Dcom.sun.management.jmxremote.authenticate=false
           

堆記憶體監控

JVM學習筆記(四)虛拟機監控與故障處理工具

線程監控:如下可以很清楚的檢視線程運作狀态及其他相關資訊。當檢測到死鎖時會自動在左欄顯示。

JVM學習筆記(四)虛拟機監控與故障處理工具

6 VisualVM

在自己本機JAVA_HOME/bin(Java8)目錄下找到jvisualvm.exe直接點選運作既可以選擇對相應程序進行監控,如下:

對heapdump檔案進行分析:

JVM學習筆記(四)虛拟機監控與故障處理工具

基本資訊監控

JVM學習筆記(四)虛拟機監控與故障處理工具

以上關于jdk基本工具的操作這位大佬的文章寫的還是挺詳細的:JVM分析工具概述

第三方分析工具

除了上述jdk提供的工具外,業界前輩們還開發出了許多功能強大、可視化更加友好的JVM監控分析工具。

比如MAT(Memory Analyzer Tool):一款基于eclipse的插件工具,簡單易用且友好的可視化界面。可利用jmap工具生成堆轉儲快照檔案,而後将檔案直接拖入eclipse項目目錄下點選即可進行分析(在已安裝MAT的情況下)。

JVM學習筆記(四)虛拟機監控與故障處理工具
JVM學習筆記(四)虛拟機監控與故障處理工具
JVM學習筆記(四)虛拟機監控與故障處理工具