2013年4月22日 星期一

在Linux上啟用Tomcat JMX Remote之二三事

對於Tomcat要啟動JMX Remote的功能,只要遵照官網說明,在catalina.sh or catalina.bat設定系統參數就可以。
不過,在Linux上在啟用就麻煩多了。首先,在linux上可能無法正確的bind到正確的ip,所以如果發現設定後無法連上JMX MBean,就在catalina.sh中,多加一個系統參數
-Djava.rmi.server.hostname=<正確的host ip>
此處的ip不可為localhost或是127.0.0.1
如果Linux是有開防火牆的話,就會更麻煩。因為JMX預設的情況是會使用一個固定的port作為registry用,另外會再使用一個隨機的port作為service通訊用。registry用的port,可以透過系統參數指定,但是service通訊用的卻不行,所以在此情況下,是無法開通防火牆的。所幸,Tomcat有提供一個元件可以來設定。到Tomcat下載頁面下載Tomcat JMX Remote jar,並放到lib資料夾中,然後修改conf/server.xml,加入以下內容
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
,其中rmiRegistryPortPlatform就是指registry port, 而rmiServerPortPlatform就是指真正service通訊用的port

只要將這兩個port在防火牆中開通,就可以從外部來監控Tomcat了。