jconsole tomcat記憶體監控設定

feng27156發表於2014-02-17

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錯誤。

相關文章