我正在尝试在防火墙后面设置一些Tomcats(V6)。这没什么大不了的 - 但我想通过JMX来监控它们。
我阅读了TC文档并遇到了JMXRemoteLifecycleListener。我的测试TC安装完全按照上面的链接设置。 因此,我没有从我们网络中的一个主机到另一个主机的连接。另外,每次启动TC时都会打开第三个随机端口。
在我的server.xml中激活了侦听器
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="8050" rmiServerPortPlatform="8060" />
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从任何其他主机连接到它们。我可以使用(service:jmx:rmi://<hostname>:8xxx/jndi/rmi://<hostname>: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"
有人有提示我为何被困在这里吗?提前谢谢!
答案 0 :(得分:14)
答案是将-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"
答案 1 :(得分:1)
问题可能是启用jmx监控时java本身打开的第二个随机端口。从Java 7开始,也可以设置此端口:
-Dcom.sun.management.jmxremote.rmi.port=7091
因此,在组合中 - 可以使用相同的端口:
-Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.rmi.port=7091
这是我的问题的解决方案。一旦端口设置为固定数量,就可以在防火墙中轻松设置。