我收集了遍布网络的信息,并通过其他成员的提示找到了信息。
JMX 造成的最大痛苦是(imo)JMX 打开第二个动态分配的网络端口这一事实。防火墙(如 iptables)会阻止这一点。
linux上tomcat的解决方案:
使用 tomcat 6.0.24 或更新版本 从 apache tomcat extras 下载 catalina-jmx-remote.jar(使用 tomcat 下载页面上的浏览)将其复制到 $CTALINA_HOME\lib
这允许您设置 JMX 使用的两个端口
编辑 server.xml 中的服务器部分
<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
结束 jmxremote.password 将是
monitorRole tomcat
controlRole tomcat
(只是简单的空格)
重启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。
如果工作站和服务器之间没有更多的防火墙,它应该可以工作。