使用VisualVM遠程監控JVM Linux服務器配置方法


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

  1. #!/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

  1. <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前加入

  1. -A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT   
  2. -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 配置安全策略

vi $JAVA_HOME/jre/lib/security/java.policy
在文件末位的 }; 前添加
permission java.security.AllPermission;

3.2 啟動jstatd

cd $JAVA_HOME/bin
./jstatd -J-Djava.security.policy=all.policy &
啟動后會開啟注冊端口1099和一個隨機的連接端口,注冊端口也可通過-p參數指定,如./jstatd -J-Djava.security.policy=all.policy -p 10003 &

3.3設置防火牆

除了把1099添加到防火牆規則外,還需要找到另外一個隨機端口,也加入到規則中
執行
netstat -anp | grep *jstatd
可以看到除了1099,jstatd還監聽了53040端口,把這個也加入到規則中,添加方法參照2.5
(注意:這個隨機端口重啟后會變化)

3.4 測試

啟動VisualVM,因為在配置JMX時已經添加過服務器節點,如果配置正確,通常VisualVM會自動檢測到jstatd連接並添加節點
如果沒有自動添加,可以檢查端口是否能連通並嘗試手動添加連接
VisualGC界面
(完)

本文永久更新鏈接地址http://www.linuxidc.com/Linux/2017-01/139409.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM