6

我在 Amazon EC2 实例上运行的一项服务上设置了 JMX,但它无法正常工作。我正在使用 VisualVM 进行连接,经过短暂的挂起后,它会因超时而失败。看起来由于缺少响应数据或滞后而失败。我检查了安全组中是否启用了 JMX 端口,还尝试了未启用 JMX 的不同端口以及安全组设置中未启用端口的情况,并且两者都立即失败,因此看起来不同。我的 EC2 实例和桌面都安装了 Ubuntu 12.04 和 JDK 7。

事实证明,端口没有意义,因为连接是 SSL 安全的。我有一个私钥,不知道如何将它与 JConsole 或 VisualVM 一起使用。

4

2 回答 2

12

JMX 需要一个在开放端口上运行的 RMI 注册表。默认情况下,RMI 注册端口是在启动时随机选择的,它不能很好地与防火墙配合使用。由于JDK7u4你可以使用

-Dcom.sun.management.jmxremote.rmi.port=<port>

设置要使用的 RMI 端口。然后您可以在安全组中启用该端口。

请注意.rmi.上述设置的部分,因为这通常会与设置混淆com.sun.management.jmxremote.port。你不应该

于 2013-10-02T08:28:06.887 回答
4

这对我有用。在您的服务器上设置 JMX 选项:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=<some port>
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Djava.rmi.server.hostname=localhost

打开 SSH 隧道:

ssh -i /path/to/key -D <some port> username@public_dns_address

启动 VisualVM:

jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:<some port> -J-Djava.net.useSystemProxies=true

添加到服务器的远程连接。使用您为 JMX 指定的端口添加 JMX 连接。

需要明确的是,在上述所有三种情况下,都应该是同一个端口。

于 2013-10-04T18:46:58.580 回答