VisualVM在Java 8中是JDK自帶的一個圖形化工具,項目主頁 "VisualVM" ,在後續版本中可能會從JDK移除。 VisualVM可以監控Java進程的CPU與記憶體占用情況,可以監控Java進程內的各個線程的執行情況,還可以與MAT工具一樣用來分析堆轉儲快照。 監控遠程Tomcat進 ...
VisualVM在Java 8中是JDK自帶的一個圖形化工具,項目主頁 VisualVM,在後續版本中可能會從JDK移除。
VisualVM可以監控Java進程的CPU與記憶體占用情況,可以監控Java進程內的各個線程的執行情況,還可以與MAT工具一樣用來分析堆轉儲快照。
監控遠程Tomcat進程
監控遠程主機上的Tomcat進程,需要在Tomcat的catalina.sh文件中加入參數:
JAVA_OPTS="$JAVA_OPTS -Dcom.sum.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPV4Stack=true -Djava.rmi.server.hostname=x.x.x.x"
- -Dcom.sum.management.jmxremote: 啟用JMX遠程連接
- -Dcom.sun.management.jmxremote.port=9004: 設置JMX連接埠
- -Dcom.sun.management.jmxremote.authenticate: 是否開啟用戶名密碼認證
- -Dcom.sun.management.jmxremote.ssl: 是否使用SSL連接
- -Djava.net.preferIPV4Stack: 優先使用IPV4
- -Djava.rmi.server.hostname: 設置JMX主機IP
打開VisualVM,文件 -> 添加JMX連接,輸入剛纔設置的IP和埠號:
監控遠程執行的jar包
監控遠程主機上使用java -jar
啟動的Java進程,需要在執行的java -jar
命令中加入以上參數:
nohup java -Dcom.sum.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPV4Stack=true -Djava.rmi.server.hostname=x.x.x.x -jar Demo-0.0.1-SNAPSHOT.jar &
VisualVM使用介紹
VisualVM的使用非常簡單,對各個面板做個簡單介紹。
- 概述面板:查看PID號,Java版本及目錄,系統環境變數,以及使用的JVM參數信息。
- 監控面板:查看Java進程的運行時間,查看CPU、記憶體的使用情況,查看類的裝載數,以及活動的線程數,可以手動執行GC以及堆Dump操作。
- 線程面板:查看Java進程內所有線程的執行狀態及運行時間,可以進行線程Dump操作,此操作輸出信息與jstack類似,輸出線程狀態及跟蹤堆棧。
- 抽樣器面板:可以對CPU和記憶體進行抽樣,對CPU抽樣,可以顯示出各個熱點方法占用的CPU時間,也可以顯示出各個線程占用的CPU時間,對記憶體抽樣,可以顯示堆記憶體中各個對象實例的記憶體占用,也可以顯示各個線程分配的記憶體大小。
除了這幾個面板之外,VisualVM還支持插件來擴展功能,常用的有Visual GC以及BTrace插件,使用插件需要在工具->插件的設置面板中配置插件中心地址,插件中心地址與JDK版本對應,具體可查看插件中心文檔。