为什么与Amazon EC2的JMX连接失败?

时间:2013-10-02 06:06:05

标签: amazon-ec2 port jmx visualvm

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

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

2 个答案:

答案 0 :(得分:11)

JMX需要在开放端口上运行的RMI注册表。默认情况下,RMI注册表端口在启动时随机选择,并且与防火墙不兼容。 从JDK7u4开始,您可以使用

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

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

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

答案 1 :(得分:3)

这对我有用。在服务器上设置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连接。

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