1. 程式人生 > >JVM記憶體監控:VisualVM遠端監控JVM

JVM記憶體監控:VisualVM遠端監控JVM

簡介

        VisualVM是一個整合多個JDK命令列工具的視覺化工具。可以作為Java應用程式效能分析和執行監控的工具。開發人員可以利用它來監控、分析執行緒資訊,瀏覽記憶體堆資料。系統管理員可以利用它來監測、控制Java應用程式橫跨整個網路的情況。Java應用程式使用人員可以利用它來建立包含所有必要資訊的Bug 報告。VisualVM遠端監控JVM有兩種方式,JMX連線和jstatd連線。配置過程中參考了很多部落格資料,然而很多不全且遇到的問題沒有說清楚,因此本文主要記錄我的完整配置過程以及配置中的注意事項,以便後來。

JMX連線

1、下載catalina-jmx-remote.jar包(

點選下載),放至tomcat/lib資料夾下;

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而啟動失敗;
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"
4、在tomcat/conf/下新建jmxremote.password和jmxremote.access檔案,其中jmxremote.password存放JMX連線時的安全憑證,jmxremote.access標明賬號許可權;


5、編輯iptables,開啟10001和10002兩個埠,重啟iptables;

service iptables restart

6、啟動tomcat即可。

jstatd連線

1、在jdk的bin目錄下新建檔案jstatd.all.policy檔案,編輯內容:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};
2、在當前目錄(jdk/bin)下,執行如下命令,其中123.59.46.165為本機(遠端伺服器)IP,&表示用守護程序方式執行
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連線需要輸入使用者名稱和口令。