Tomcat 6,JMX和动态端口问题

在阅读并尝试了很多之后,我不得不问是否有人能解决我的问题。

我试图在防火墙后面设置一些Tomcats(V6)。 这没什么大不了的 – 但我想通过JMX监控它们。

我阅读了TC文档并遇到了JMXRemoteLifecycleListener 。 我的测试TC安装完全按照上面的链接进行设置。 因此,我没有从我们网络中的一个主机到另一个主机的连接。 另外,每次启动TC时都会打开第三个随机端口。

在我的server.xml中,监听器被激活

 

catalina.out说一切都好。

 2011-06-14 16:46:48,819 [main] INFO org.apache.catalina.mbeans.JmxRemoteLifecycleListener- The JMX Remote Listener has configured the registry on port 8050 and the server on port 8060 for the Platform server 

端口是开放的,我可以通过telnet从任何其他主机连接到它们。 我可以在本地连接到vm( service:jmx:rmi://:8xxx/jndi/rmi://:8xxxx/jmxrmi

Netstats输出如下:

 tcp6 0 0 :::8080 :::* LISTEN 11291/java tcp6 0 0 :::8050 :::* LISTEN 11291/java tcp6 0 0 :::8060 :::* LISTEN 11291/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 11291/java tcp6 0 0 :::60901 :::* LISTEN 11291/java tcp6 0 0 127.0.0.1:8009 :::* LISTEN 11291/java 

Tomcat甚至已经启动了所有足够的VM选项

 CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=TRUE -Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access" 

有没有人暗示我为什么被困在这里? 提前致谢!

答案是将-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx放到一般的JMX选项中。

自动设置主机名的示例:

 IP=`ifconfig eth0 | grep 'inet '| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'``; CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=TRUE -Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access -Djava.rmi.server.hostname=$IP" 

问题可能是启用jmx监控时java本身打开的第二个随机端口。 从Java 7开始,也可以设置此端口:

-Dcom.sun.management.jmxremote.rmi.port=7091

所以在组合中 – 可以使用相同的端口:

-Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.rmi.port=7091

这是我的问题的解决方案。 端口设置为固定数量后,可以在防火墙中轻松设置。