1. 程式人生 > 程式設計 >JVM監控工具

JVM監控工具

通過JVM監控,我們可以瞭解GC的內部過程,知道什麼時候新生代的物件被移動到老年代,什麼時候發生了GC,以及GC持續了多長時間。

想要進行JVM調優,必須要知道當前的JVM狀態,JVM監控是必不可少的一步,這裡主要介紹三種常見的JVM監控方式。

jstat

最原始卻最有效的一種方式,不需要對java應用做額外的配置,安裝JDK的時候預設就有的工具,當我們想要了解JVM執行狀態的時候,一個jstat就能滿足我們大部分的需求。

1 一般jstat與java程式安裝在一起,我們可以看一下。

image-20191001215540689

2 使用

# 例如:jstat -class -t 79065 1000 5,代表監控pid為79065的jvm程式,檢視其class資訊,並且沒1s鍾監控一次,總共監控5次。
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] # jstat可以監控的內容如下 jstat -options -class 統計JVM中classload的資訊 -compiler 統計JIT編譯器的資訊 -gc 統計GC的堆記憶體資訊 -gccapacity 統計JVM的堆記憶體剩餘空間 -gccause 統計導致最新一次GC的原因 -gcmetacapacity -gcnew 統計新生代的資訊 -gcnewcapacity -gcold 統計老年代的資訊 -gcoldcapacity -gcutil 顯示GC的統計資訊 -printcompilation 顯示JVM的編譯方法統計 複製程式碼

2019-10-01 22.02.34

列解釋:

S0C 存活區0的容量(KB) S1C 存活區1的容量(KB) S0U 存活區0使用的空間 (KB). S1U 存活區1的利用空間 (KB). EC Eden區的容量(KB). EU Eden區利用的容量(KB). OC 老年代容量(KB). OU 老年代使用容量(KB). PC 當前永久帶的容量(KB). PU 永久帶使用容量(KB). YGC 發生了多少次Young GC YGCT Young GC的時間 FGC Full GC的次數 FGCT Full GC的收集時間 GCT 總共的GC時間.

看到上面是不是發現,簡單直接有有效。

jconsole或jvisualvm

這兩個工具也是JDK自帶的內容,jvisualvm可能需要線上下載一下,不過兩者都是通過jmx來訪問JVM然後進行統計的,在啟動JVM的時候,要指定jmx的內容。

方式一:指定密碼,增加安全性

java  -Dcom.sun.management.jmxremote.port=5000  -Dcom.sun.management.jmxremote.password.file=/Users/aihe/Documents/jmxremote.password   -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.access.file=/Users/aihe/Documents/jmxremote.access -jar target/jmxdemo-0.0.1-SNAPSHOT.jar
複製程式碼

image-20191001222219155

image-20191001222423253

image-20191001222342645

arthas

阿里開源的一款好用的jvm監控工具,有點像是把jdk中自帶的命令列工具做了集合。

1 安裝

# 安裝方式一
curl -L https://alibaba.github.io/arthas/install.sh | sh
# 安裝方式二
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
複製程式碼

2 使用

java -jar arthas-boot.jar
複製程式碼

image-20191001223248949

image-20191001223319224

參考地址:alibaba.github.io/arthas/inst…

注意

使用完之後記得shutdown,如果不shutdown可能存在一些問題,比如監控的仍然是上次的jvm程式,反正就先用shutdown吧。

最後

本次介紹了自己常用的監控JVM工具,如果有更好的工具,請推薦給我