他のメンバーのヒントを参考に、ネット上に散らばる情報を集めてみました。
JMX によって引き起こされるほとんどの問題は、(imo) JMX が動的に割り当てられた 2 番目のネットワーク ポートを開くという事実です。ファイアウォール (iptables など) がこれをブロックします。
Linux上のTomcatのソリューション:
tomcat 6.0.24 以降を使用します Apache tomcat extras から catalina-jmx-remote.jar をダウンロードします (Tomcat ダウンロード ページの参照を使用) $CTALINA_HOME\lib にコピーします
これにより、JMX が使用する両方のポートを設定できます。
server.xml の Server セクションを編集します
<Server port="8005" ..>
...
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9840" rmiServerPortPlatform="9841"/>
いくつかの環境変数を設定します (setenv.sh など)。
CATALINA_OPTS="
-Djava.rmi.server.hostname=IP-TO-LISTEN
-Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
-Dcom.sun.management.jmxremote.ssl=false"
これにより、JMX のアクセス制御が有効になります
jmxremote.access は次のようになります
monitorRole readonly
controlRole readwrite
end jmxremote.password は
monitorRole tomcat
controlRole tomcat
(単純なスペースのみ)
トムキャットを再起動します。
サーバーでファイアウォールを構成します(例:iptables)
/etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9841 -j ACCEPT
および /etc/sysconfig/ip6tables
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9841 -j ACCEPT
iptablesを再起動します
終わり!
ここで、ワークステーションで VisualVM または JConsole を使用して、rmiRegistryPortPlatform (サンプルでは 9840) への接続を確立します。
ワークステーションとサーバーの間にファイアウォールがなければ、動作するはずです。