Jconsole是JDK自帶的一個很好的jvm查看工具,免費不用說,而且內存狀態刷新的快,垃圾回收也快。由於,需要監控一個即將上線的web應用是否有內存泄露,即需要監控tomcat的jvm內存狀況。Jconsole是基於jmx進行通信、信息發送獲取的,因此需要對tomcat進行相應設置,jconsole才可監控tomcat。
1、windows下,通常是我們的開發環境
Windows下,通常是我們的開發環境設置tomcat相關參數,首先反應是修改catalina.bat等文件,我個人意見這些啟動文件能不改盡量不改,沒多大好處。幸運的是,我們現在java開發基本上都是基於eclipse或者myeclipse的,因此只要的eclipse或者myeclipse服務器配置中,設置tomcat服務器的啟動參數即可。
如myeclipse8.5,windows—>preferencesàmyeclipseàserversàtomcat6,在其JDK optional java vm arguments設置中,輸入下述內容即可:
-Xmx256m -Xms128m -Djava.rmi.server.hostname=192.168.10.101 -Dcom.sun.management.jmxremote.port=8061 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
設置完畢后,在myeclipse中啟動tomcat,我們即可啟動jconsole連接 192.168.0.1:8061進行tomcat的jvm內存監控。
2、linux下
現在,大多數生產機的tomcat應用都是部署在linux或者unix機器上,windows上很少,本文以linux為例。
還是基於我剛才的原則,不修改catalina.sh等啟動文件。我們手工創建一個start文件,內容如下:
JAVA_HOME=/usr/java/jdk1.6.0_06/ TOMCAT_HOME=/usr/java/apache-tomcat-6.0.16 PATH=$JAVA_HOME/bin:TOMCAT_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH CATALINA_OPTS="-Xmx3072m -Xms3072m -Djava.rmi.server.hostname=192.168.1.101 -Dcom.sun.management.jmxremote.port=8061 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password" export CATALINA_OPTS /usr/java/apache-tomcat-6.0.16/bin/startup.sh
將start文件存放到tomcat bin目錄下,則我們只要以下指令即可啟動tomcat:
at –f /usr/java/apache-tomcat-6.0.16/bin/start now
由於是生產機的設置,因此設置Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password,jconsole連接192.168.1.101:8061時需要用戶名和口令驗證,確保安全性。
實際上會用到2個文件,jmxremote.access文件和jmxremote.password文件,前者設置用戶,后者設置用戶及對應的口令。這連個文件在$JAVA_HOME/jre/lib/management都有,我們只要修改其中的用戶和口令即可。
這里一個需要特別注意的是jmxremote.password訪問權限一定要設置好,設置成owner可讀即可,否則tomcat啟動失敗,會報類似jmxremote.password resticted錯誤。