远程 JMX 连接

2022-08-31 10:00:11

我正在尝试打开与远程计算机上运行的java应用程序的JMX连接。

应用程序 JVM 配置了以下选项:

  • com.sun.management.jmxremote
  • com.sun.management.jmxremote.port=1088
  • com.sun.management.jmxremote.authenticate=false
  • com.sun.management.jmxremote.ssl=false

我能够使用jconsole或jvisualvm进行连接。但是我无法从远程计算机使用进行连接。localhost:1088xxx.xxx.xxx.xxx:1088

服务器之间或操作系统上没有防火墙。但是为了消除这种可能性,我和我认为它是连接的,因为控制台屏幕变为空白。telnet xxx.xxx.xxx.xxx 1088

这两台服务器都是 Windows Server 2008 x64。尝试使用 64 位 JVM 和 32 位,两者都不起作用。


答案 1

如果它是在Linux上,问题是localhost是环回接口,你需要应用程序绑定到你的网络接口

您可以使用 netstat 确认它未绑定到预期的网络接口。

您可以通过使用 system 参数调用程序来实现此目的,可以作为环境变量使用java.rmi.server.hostname="YOUR_IP"

java -Djava.rmi.server.hostname=YOUR_IP YOUR_APP

答案 2

我花了一天多的时间试图让JMX在localhost之外工作。看来 SUN/Oracle 未能就此提供良好的文档。

请确保以下命令返回真实的 IP 或主机名。如果它确实返回了类似127.0.0.1,127.0.1.1或localhost之类的东西,它将不起作用,您将必须更新文件。/etc/hosts

hostname -i

这是即使从外部启用JMX所需的命令

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.port=1100
-Djava.rmi.server.hostname=myserver.example.com

正如您所假设的那样,myserver.example.com 必须与返回的内容相匹配。hostname -i

显然,您需要确保防火墙不会阻止您,但我几乎可以肯定这不是您的问题,问题是未记录的最后一个参数。


推荐