VisualVM 是JDK自帶的一款全能型性能監控和故障分析工具,包括對CPU使用、JVM堆內存消耗、線程、類加載的實時監控,內存dump文件分析,垃圾回收運行情 況的可視化分析等,對故障排查和性能調優很有幫助。在Windows中安裝JDK后,VisualVM位於%JAVA_HOME%/bin/下,直接執行 jvisualvm.exe即可,一個主要運行界面如圖:
VisualVM會自動檢測本機運行中的JVM並建立連接,本文主要介紹連接遠程Linux服務器的配置方法,測試環境為CentOS 6.5,JDK8,Tomcat8。
VisualVM連接遠程服務器有兩種方式:JMX和jstatd,兩種方式都不能完美支持所有功能,例如JMX不支持VisualGC,jstatd不支持CPU監控,實際使用可同時配置上並按需選用。
1 配置前的准備
我們需要先檢查linux的hostname匹配的IP,執行
hostname -i
如果匹配的結果是無法識別或者127.0.0.1, 則需要手動配置主機名和IP映射。假設要用於建立連接的IP是192.168.11.233,主機名是mylinux:
vi /etc/hosts
添加一行
192.168.11.233 mylinux
2 配置JMX
2.1 創建setenv.sh
進入tomcat/bin目錄
vi setenv.sh
- #!/bin/shexport JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"
(-Xms512m -Xmx512m不是必須的參數,放在這里只是示意可以連同JVM參數一起調整)
設置權限
chmod +x setenv.sh
2.2 在server.xml中添加listener
進入tomcat/conf目錄
vi server.xml
- <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
端口可根據實際情況修改,添加后的結構如下圖
2.3 JMX訪問控制文件
進入tomcat/conf目錄,執行
cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.passwordcp $JAVA_HOME/jre/lib/management/jmxremote.access jmxremote.access
然后
vi jmxremote.password
取消以下兩行注釋
#monitorRole QED
#controlRole R&D
也可以自定義賬號,按username password的格式添加一行,這樣就需要同時修改jmxremote.access
vi jxmremote.access
在最下面添加
username readwrite
修改權限
chmod 600 jmxremote.password
chmod 600 jxmremote.access
2.4 添加catalina-jmx-remote.jar
下載地址 http://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina-jmx-remote
下載后復制到 tomcat/lib目錄
至此,配置工作完成,但是還需要把2.2中的兩個端口加入到防火牆允許規則中
2.5 設置防火牆
vi /etc/sysconfig/iptables
在-A INPUT -j REJECT --reject-with icmp-host-prohibited前加入
- -A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT
- -A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT
service iptables restart
在客戶機上telnet 服務器的10001和10002端口,如果都通就正確了。
2.6 測試
在客戶機上啟動jvisualvm.exe,在左側樹形菜單的遠程上右鍵 -> 添加遠程主機,主機名填寫服務器IP
確定后,遠程下出現新的子節點,在子節點上右鍵 -> 添加JMX連接
連接輸入IP:10001,注意這個端口是2.2步驟中配置的rmiRegistryPort。勾選使用安全憑證,用戶名和口令即2.3步驟中jmxremote.password文件內的用戶名和對應密碼。勾選保存安全憑證
本文的配置中未啟用SSL,點確定后會提示“請確認不用SSL方式嘗試連接”,選擇“是”。如果一切順利在服務器節點下出現JMX連接子節點,雙擊后即可打開功能界面。
嘗試一下強大的Visual GC插件,很遺憾,提示"不受此JVM支持“,如果想使用這個插件,就需要配置jstatd連接方式,下面來看jstatd的配置。
3 配置jstatd
3.1 配置安全策略
在文件末位的 }; 前添加
permission java.security.AllPermission;

3.2 啟動jstatd
./jstatd -J-Djava.security.policy=all.policy &
3.3設置防火牆

3.4 測試

