我在 JDK1.6 中对 jconsole.exe 和 JVisualVM.exe 有很多经验,并且已经通过 JMX.remote 从 Windows JVM 连接到另一台机器上的 Windows JVM 数千次,但是当我失败时尝试监视在 Linux 主机上运行的 java 实例(从 Windows 主机,我在 Amazon EC2 的 redhat 和 SUSE 上尝试了 JMX 监听器)。我也尝试使用 jconsole.exe 并得到类似的错误。
有没有人能想到,为什么这种 JMX 连接会出现问题。我可以尝试任何想法吗?有没有人“实际”做到了这一点,并且可以说如果我坚持不懈,它就会奏效?
我从 JVisualVM 得到的错误(在远程连接尝试中)是这样的:
"Cannot connect using service:jmx:rmi:///jndi/rmi://<jmx service ip>:8001/jmxrmi"
我的远程 JMX 服务配置是这样的:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.hostname=<jmx service ip>
在 this link 发现了类似的问题但它没有回答我的问题。
我确认“iptables”未作为服务启用且未打开,因此我不认为存在任何类型的防火墙阻塞。此外,windows 和 linux 机器都在一个 10.0.0.0 私有(private)内部子网上。我能够远程登录到端口 8001 以验证它在那里,以及它在 linux 机器上的监听 (netstat -ap)。
最佳答案
查看系统属性 java.rmi.server.hostname .在您的 Linux 服务器 JVM 上,将此系统属性设置为主机的公共(public) IP。然后在您的客户端 JMX URL 中使用公共(public) IP。
关于java - JMX : cant connect from Windows box to monitor JMX port on a Linux system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383235/