最近項目已經要提測了,有時間來考慮一些性能上的事兒了。之前拜讀過《深入理解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 ,如果作者看到有不恰當或者侵權行為請聯系本人。