连接位于防火墙后的远程JBoss服务器使用JMX。

3

我已经向我的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。 当我尝试使用以下JMX字符串在JVisualVM中连接实例(94.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

你的 JBoss 服务器在防火墙后面吗?另外,我假设这是一个打字错误,但你的第一行缺少结束引号。 - jtahlborn
抱歉,引用是复制粘贴错误,我的服务器在防火墙后面。也许端口没有正确打开。 - Biscuit128
2个回答

5

在防火墙后面使rmi工作有一个小技巧。RMI使用两个端口,如果你没有指定这两个端口,它在防火墙后面无法正常工作。好消息是,你可以使用相同的端口作为这两个端口。不好的消息是,这不是默认的功能。更糟糕的是,在JDK 7之前,没有办法使用命令行配置JMX来实现这一点。假设你正在运行JDK 7+,你需要添加这个参数:

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

这里有更多详细信息,点击http://realjenius.com/2012/11/21/java7-jmx-tunneling-freedom/查看。


@Biscuit128 - 可能还存在其他防火墙问题,但这也是使其正常工作的要求。当然,它假定您的服务器正在运行jdk 7u4或更高版本。 - jtahlborn
@Biscuit128 - 这是一个Linux系统吗?这个系统的“hostname”是否解析为“127.0.0.1”? - jtahlborn
主机名解析为别名i,我将其命名为secondstory1d。是的,它是Fedora 20,并且是在我的本地网络上运行的一个盒子。 - Biscuit128
@Biscuit128 - 'hostname -i' 输出的是什么? - jtahlborn
@Biscuit128 - 可能是IPv6的问题。你的netstat输出表明它正在侦听IPv6。可能有其他东西不喜欢这个?如果你不需要IPv6支持,如果你在jvm参数中添加“-Djava.net.preferIPv4Stack=true”会发生什么? - jtahlborn
显示剩余6条评论

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

希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接