JVM記憶體監控:VisualVM遠端監控JVM
簡介
VisualVM是一個整合多個JDK命令列工具的視覺化工具。可以作為Java應用程式效能分析和執行監控的工具。開發人員可以利用它來監控、分析執行緒資訊,瀏覽記憶體堆資料。系統管理員可以利用它來監測、控制Java應用程式橫跨整個網路的情況。Java應用程式使用人員可以利用它來建立包含所有必要資訊的Bug 報告。VisualVM遠端監控JVM有兩種方式,JMX連線和jstatd連線。配置過程中參考了很多部落格資料,然而很多不全且遇到的問題沒有說清楚,因此本文主要記錄我的完整配置過程以及配置中的注意事項,以便後來。
JMX連線
1、下載catalina-jmx-remote.jar包(
2、編輯tomcat/conf/server.xml,新增監聽埠
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
3、編輯tomcat/bin/catalina.sh,在JAVA_OPTS中新增系統配置,注意,此段配置要加在$CATALINA_BASE定義之後,否則tomcat會因為找不到$CATALINA_BASE而啟動失敗;4、在tomcat/conf/下新建jmxremote.password和jmxremote.access檔案,其中jmxremote.password存放JMX連線時的安全憑證,jmxremote.access標明賬號許可權;export JAVA_OPTS="-server -Dfile.encoding=UTF-8 \ -Dcatalina.logbase=/var/log/tomcat7 \ -Dnet.sf.ehcache.skipUpdateCheck=true \ -XX:+DoEscapeAnalysis \ -XX:+UseConcMarkSweepGC \ -XX:+CMSClassUnloadingEnabled \ -XX:+UseParNewGC \ -Xms1536m -Xmx1536m \ -Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password \ -Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access \ -Dcom.sun.management.jmxremote.ssl=false"
5、編輯iptables,開啟10001和10002兩個埠,重啟iptables;
service iptables restart
6、啟動tomcat即可。
jstatd連線
1、在jdk的bin目錄下新建檔案jstatd.all.policy檔案,編輯內容:
2、在當前目錄(jdk/bin)下,執行如下命令,其中123.59.46.165為本機(遠端伺服器)IP,&表示用守護程序方式執行grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=123.59.46.165 &
3、執行命令jps,檢視找到jstatd的pid,執行命令netstat
-autup | grep pid,檢視監聽的除預設1099埠外的另一個埠,此處為35934;
4、編輯iptables,開啟1099和35934埠,重啟iptables。
問題
配置完之後仍然連線失敗,執行hostname -i,如果返回的不是本機IP,則原因在於hostname。
客戶端程式向伺服器請求一個物件的時候,返回的stub物件裡面包含了伺服器的hostname,客戶端的後續操作都是根據這個hostname來連線伺服器端。因此如果hostname返回的是區域網IP或127.0.0.1,而客戶端不在該區域網內,則會連線失敗。
解決
1、編輯/etc/hosts,新增一行,使本機IP和hostname對應;
123.59.46.165 fraborna
2、編輯/etc/sysconfig/network,編輯hostname;HOSTNAME=fraborna
3、執行命令;hostname fraborna
4、執行hostname -i檢視,返回的應該是本機IP。
總結
至此,伺服器端配置結束,客戶端開啟jvisualvm,連線即可,記得JMX連線需要輸入使用者名稱和口令。