VisualVM遠程連接Tomcat


最近項目已經要提測了,有時間來考慮一些性能上的事兒了。之前拜讀過《深入理解java虛擬機》,只可惜當時功力尚淺,有些東西還是不太懂,而且應用場景也沒有,所以借這次機會看看。當然了,這次並不包含什么深入的技術內容,只是使用VisualVM來連接遠程的Tomcat,先擺好姿勢。

VisualVM

VisualVm是一個將很多JDK命令工具可視化的windows程序,直接下載解壓就可以使用(如果安裝了JDK的話,在JDKbin目錄下就有)。可以安裝很多插件,在工具>插件里面查找。先來一張圖瞅瞅

看到這些圖形化的信息還是很激動的,這樣學習JVM就可以對照着來了

遠程監控

要對Tomcat遠程監控,需要對遠端的Tomcat和JDK進行配置

修改IP

我使用的Linux,使用hostname -i 查看ip是否為自己的外網IP(如果你僅僅是內網,是內網的IP,但不能是127.0.0.1或者localhost)

# localhost是本地環回地址,lack為機器名,將localhost修改為對應ip
# 如:10.10.23.10 lack
localhost lack

通過jstatd啟動RMI

要通過遠程訪問jstatd需要進行授權,在JAVA_HOME/bin目錄下創建jstatd.all.policy文件,內容如下:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

注意空格,最好直接復制。使用以下命令啟動jstatd(注意:要在JAVA_HOME/bin目錄下運行該命令)

jstatd -J-Djava.security.policy=jstatd.all.policy &

這個時候在VisualVM里面的遠程連接上右鍵->添加遠程主機,輸入IP就可以看到Jstatd了

配置JMX管理Tomcat

默認Tomcat只可以從本地使用JMX,進行遠程管理需要進行以下配置。打開Tomcat下的bin/catalina.sh(windows下為bat)文件,在一堆注釋后面添加一行

JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -    Dcom.sun.management.jmxremote.ssl=false 

然后在VisualVM里面右鍵添加JMX連接,輸入IP和端口號9999(端口號可以自定義,但是必須保證沒有被占用!!!)

好滴,到此就配置完成了,接下來說說上面幾個參數的意義:

-Dcom.sun.management.jmxremote :允許使用JMX遠程管理
-Dcom.sun.management.jmxremote.port=9008 :JMX遠程連接端口
-Dcom.sun.management.jmxremote.authenticate=false :不進行身份認證,任何用戶都可以連接
-Dcom.sun.management.jmxremote.ssl=false :不使用ssl

不使用ssl就勾選最后一個“不要求ssl連接”,因為沒有身份證,所以也不勾選使用安全憑證。但是如果連接的是公網上的Tomcat,那么就要注意安全性了,接下來看看使用用戶名和密碼連接

依然是在catalina.sh里面,設置JAVA_OPTS

JAVA_OPTS='-Xms128m -Xmx256m -XX:MaxPermSize=128m
        -Djava.rmi.server.hostname=10.10.23.10
        -Dcom.sun.management.jmxremote.port=9999
        -Dcom.sun.management.jmxremote.ssl=false
        -Dcom.sun.management.jmxremote.authenticate=true
        -Dcom.sun.management.jmxremote.password.file=/usr/java/default/jre/lib/management/jmxremote.password
        -Dcom.sun.management.jmxremote.access.file=/usr/java/default/jre/lib/management/jmxremote.access'
/usr/java/default/jre/lib/management/jmxremote.password和/usr/java/default/jre/lib/management/jmxremote.access是兩個文件(在JAVA_HOME\jre\lib\management下有模板),以下分別編輯兩個文件
# /usr/java/default/jre/lib/management/jmxremote.password
#
(123456、123456789為密碼)
monitorRole 123456 
controlRole 123456789
# /usr/java/default/jre/lib/management/jmxremote.access
monitorRole   readonly
controlRole   readwrite

新建完成這兩個文件要修改jmxremote.password的權限

chmod 600 jmxremote.password

接下來就可以遠程連接了

 


 

 

以上內容有參考: http://www.blogjava.net/titanaly/archive/2012/03/20/372318.html  ,非常感謝 Energy of Love ,如果作者看到有不恰當或者侵權行為請聯系本人。


免責聲明!

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



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