【问题标题】:Tomcat 6, JMX and the dynamic port problemTomcat 6、JMX 和动态端口问题
【发布时间】:2011-09-14 19:15:43
【问题描述】:

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

我正在尝试在防火墙后面设置一些 Tomcat (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://&lt;hostname&gt;:8xxx/jndi/rmi://&lt;hostname&gt;: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"

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

【问题讨论】:

  • 尝试在 VM 选项中设置端口看起来您在 Cat opts -Dcom.sun.management.jmxremote.port=8086 的第一行中缺少该端口
  • @Keibosh 关于文档,如果您使用 TC 侦听器,则应避免使用此选项。即使使用此选项,它也不起作用。
  • 明白了,第一次掩盖得太快了。如果它在这些端口上本地运行没有问题,您可能会遇到这个问题。 olegz.wordpress.com/2009/03/23/… 在文章的中间,他讨论了推送给客户端的私有地址而不是公共地址。
  • 非常感谢,将-Djava.rmi.server.hostname=IP 放入我的启动脚本中它起作用了:) 但是有可能在 TC 之外自动完成这项工作吗?在一堆实例中这样做有点烦人......

标签: java monitoring tomcat6 jmx tomcat


【解决方案1】:

答案是将-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"

【讨论】:

  • 非常感谢!
【解决方案2】:

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

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

所以结合起来 - 可以使用相同的端口:

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

这就是我的问题的解决方案。一旦端口设置为固定编号,就可以在防火墙中轻松设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多