經過JVM監控,咱們能夠了解GC的內部過程,知道何時新生代的對象被移動到老年代,何時發生了GC,以及GC持續了多長時間。html
想要進行JVM調優,必需要知道當前的JVM狀態,JVM監控是必不可少的一步,這裏主要介紹三種常見的JVM監控方式。java
最原始卻最有效的一種方式,不須要對java應用作額外的配置,安裝JDK的時候默認就有的工具,當咱們想要了解JVM運行狀態的時候,一個jstat就能知足咱們大部分的需求。git
1 通常jstat與java程序安裝在一塊兒,咱們能夠看一下。github
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的編譯方法統計
複製代碼
列解釋:bash
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時間.curl
看到上面是否是發現,簡單直接有有效。jvm
這兩個工具也是JDK自帶的內容,jvisualvm可能須要在線下載一下,不過二者都是經過jmx來訪問JVM而後進行統計的,在啓動JVM的時候,要指定jmx的內容。工具
方式一:指定密碼,增長安全性url
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
複製代碼
阿里開源的一款好用的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
複製代碼
參考地址:alibaba.github.io/arthas/inst…
使用完以後記得shutdown,若是不shutdown可能存在一些問題,好比監控的仍然是上次的jvm進程,反正就先用shutdown吧。
本次介紹了本身經常使用的監控JVM工具,若是有更好的工具,請推薦給我