Java Tomcat 6、JMX和动态端口问题

Java Tomcat 6、JMX和动态端口问题,java,monitoring,tomcat6,jmx,tomcat,Java,Monitoring,Tomcat6,Jmx,Tomcat,在阅读和尝试了很多之后,我不得不问是否有人能解决我的问题 我正在尝试在防火墙后面设置一些Tomcat(V6)。这没什么大不了的,但我想通过JMX监控它们 我读了TC文档,发现了。我的测试TC安装完全按照上述链接中的说明进行设置。 因此,我无法从网络中的一台主机连接到另一台主机。另外,第三个随机端口在每次启动TC时都是打开的 在my server.xml中,侦听器被激活 <Listener className="org.apache.catalina.mbeans.JmxRemoteLife

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

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

我读了TC文档,发现了。我的测试TC安装完全按照上述链接中的说明进行设置。 因此,我无法从网络中的一台主机连接到另一台主机。另外,第三个随机端口在每次启动TC时都是打开的

在my server.xml中,侦听器被激活

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="8050" rmiServerPortPlatform="8060" />
端口是开放的,我可以通过telnet从任何其他主机连接到它们。我能够通过(
服务:jmx:rmi://:8xxx/jndi/rmi://:8xxx/jmxrmi
)本地连接到vm

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"

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

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

因此,在组合中,可以使用相同的端口:

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


这就是我问题的解决办法。一旦将端口设置为固定数字,就可以在防火墙中轻松设置。

尝试在VM选项中设置端口。在Cat选项的第一行中,您似乎缺少该端口-Dcom.sun.management.jmxremote.port=8086@Keibosh关于文档,如果您使用的是TC侦听器,则应避免使用此选项。即使有了这个选项,它也不起作用。明白了,第一次太快就被掩盖了。如果它在本地运行而在这些端口上没有问题,那么您可能遇到了这个问题。在文章的一半,他讨论了推送到客户机的私有地址,而不是公共地址。非常感谢,在我的启动脚本中加入了
-Djava.rmi.server.hostname=IP
,它起作用了:),但是有可能在TC之外自动完成吗?在很多情况下这样做有点烦人…非常感谢!!
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"