在防火墙后面使用JMX连接到远程JBoss

时间:2014-08-04 17:18:54

标签: java jboss jmx jvisualvm

我已将以下属性添加到我的JBOSS EAP 6.2服务器;

   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
   JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=94.5.19.27"

并重新启动了jboss。当我尝试使用JVisualVM中的JMX字符串中的以下内容连接到实例时(9​​4.5.19.27:9999),我收到以下错误消息

enter image description here

有谁知道我可能需要传递哪些其他配置?

由于

编辑如果是防火墙问题 - 会返回如下内容;

[secondstory_dev@secondstory1d log]$ netstat -na | grep 9999
tcp6       0      0 127.0.0.1:9999          :::*                    LISTEN

2 个答案:

答案 0 :(得分:3)

让rmi在防火墙后面工作有一个技巧。 rmi使用两个端口,如果您未指定两个端口,则它无法通过防火墙工作。好的部分是你可以为两个端口使用相同的端口。令人讨厌的是,这不是默认功能。更糟糕的是,直到jdk 7,没有办法使用命令行配置jmx来执行此操作。假设你在jdk 7+上运行,你需要添加这个参数:

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

此处有更多详情http://realjenius.com/2012/11/21/java7-jmx-tunneling-freedom/

答案 1 :(得分:0)

您需要添加以下选项:

-Dcom.sun.management.jmxremote.local.only=false

在重新启动时,当您运行“ netstat”时,您会看到该端口不只为本地主机打开:

$ netstat -na | grep 9999 tcp6 0 0 :::9999 :::* LISTEN

最后,您可以使用telnet进行验证:

telnet 94.5.19.27 9999

如果无法连接,则可能需要在Linux中检查防火墙:

firewall-cmd --permanent --add-port=9999/tcp

希望对您有帮助