设置 Dcom.sun.management.jmxremote 环境变量后,无法连接到 remoteJMX 但能够在同一端口上进行 Telnet?

设置 Dcom.sun.management.jmxremote 环境变量后,无法连接到 remoteJMX 但能够在同一端口上进行 Telnet?

我现在很困惑,因为我们需要通过 remotejxm 连接,通过监控应用程序监控服务器上的 JDK,但尝试连接时,我反复被告知它没有运行。我们已经检查了端口,8999 端口是开放的,但它不允许我通过 remotejxm 连接,但我能够通过同一端口上的 telnet 连接,我的 Java 选项设置如下(我们在 Windows Server 2003 上运行 Tomcat)。如果您能提供任何关于我还可以研究什么的建议,我将不胜感激

-Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 6.0
-Dcatalina.base=C:\Program Files\Apache Software Foundation\Tomcat 6.0
-javaagent:C:\Program Files\Apache Software Foundation\Tomcat 6.0\AppManager\WebTransactionAgent.jar
-Djava.endorsed.dirs=C:\Program Files\Apache Software Foundation\Tomcat 6.0\endorsed
-Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\logging.properties
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC
-XX:+PrintTenuringDistribution
-Xloggc:C:\Program Files\Apache Software Foundation\Tomcat 6.0\logs\heap.log
-XX:MaxPermSize=512m
-XX:+UseConcMarkSweepGC
-XX:NewSize=1024m
-Dfile.encoding=UTF-8
-Xdebug
-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

答案1

我们遇到了类似的问题,最终与防火墙有关,因为 JMX RMI 实际上使用两个端口,一个是您指定的,另一个由服务器随机绑定。来自:

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

如果您遇到过这个问题,您可能已经知道,JMX RMI 连接器会打开两个端口:一个用于 RMI 注册表,它是您通常使用 -Dcom.sun.management.jmxremote.port= 属性提供的端口。另一个端口用于导出 JMX RMI 连接对象。第二个端口通常是随机动态分配的。实际上,您不需要知道这个端口号即可连接到 JMX 代理:您需要知道的唯一端口号是 RMI 注册表端口号,从中可以获取连接对象。

如果某处有限制性防火墙,则可能会导致问题。

相关内容