白天看了看如何VisualVM如何遠程連接到linux的tomcat上,進行一般的jvm的監控,真不容易啊,白天搞了好大一陣子都沒有搞定,晚上一小會就搞定了,總結原因還是因爲之前找的那個的如何連接的文章寫的不好,真是誤導大衆啊。其中VisualVM支持兩種一種是jmx,一種是jstatd,我們先做jmx的方式
在這裏把如何連接記錄一下,方便下次進行連接:首先把java_home下的jre/lib/management目錄下的jmxremote.password.template拷貝一份,並且把他重命名爲jmxremote.password,打開jmxremote.password 去除# monitorRole QED 和 # controlRole R&D前的註釋,然後在tomcat的bin中的catalina.sh 中在JAVA_OPTS環境變量的賦值下面加入
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.137.102
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=18999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
其中-Djava.rmi.server.hostname=192.168.137.102,後面是服務器tomcat所在的ip,Dcom.sun.management.jmxremote.port=18999是jmx遠程調用開放的端口,-Dcom.sun.management.jmxremote=true表示支撐遠程調用,-Dcom.sun.management.jmxremote.ssl=false 表示不需要開啓ssl, -Dcom.sun.management.jmxremote.authenticate=false表示不需要開啓用戶名密碼驗證,記得把那個遠程調用開放的端口通過防火牆,用完,記得及時把它關了,然後我們在VisualVM中選擇遠程->添加遠程主機->輸入遠程的那臺機器的ip也就是-Djava.rmi.server.hostname=後面配置的ip,然後在對應的ip那裏選擇添加jmx,輸入-Djava.rmi.server.hostname=配置的ip與-Dcom.sun.management.jmxremote.port=配置的端口,這樣確定就好了。挺簡單的。但是這樣安裝我們沒法看visual gc插件中的信息或者出現不受此jvm支持,我們如何解決這個問題?我們就只能採用第二種方式也就是添加jstatd的方式就可以解決了。
如何添加jstatd?首先在JAVA_HOME的bin下,創建jstatd.all.policy文件,把如下內容放到裏面
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
然後在bin目錄下,執行:
./jstatd -J-Djava.rmi.server.hostname=192.168.137.102 -J-Djava.security.policy=jstatd.all.policy -p 9999
其中-J-Djava.rmi.server.hostname=後面是服務器的地址,-p 9999表示調用的端口是9999,這樣就可以避免端口衝突。然後再遠程的機器添加jstatd
連接,這樣就添加好了,搞定了,也很簡單。