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

Amazon ec2 为什么JMX与Amazon EC2的连接失败?,amazon-ec2,port,jmx,visualvm,Amazon Ec2,Port,Jmx,Visualvm,我在AmazonEC2实例上运行的一个服务上设置了JMX,但它不能正常工作。我正在使用VisualVM进行连接,在短时间的挂起后,它会因超时而失败。看起来它失败是因为缺少响应数据或延迟。我检查了JMX端口是否已在安全组中启用,并且还尝试了在未启用JMX的情况下使用不同的端口,以及在安全组设置中未启用的端口,但两个端口都立即失败,因此看起来不同。我的EC2实例和桌面都安装了Ubuntu 12.04和JDK 7 事实证明,端口没有意义,因为连接是SSL安全的。我有一个私钥,不知道如何与JConsol

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


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

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

-Dcom.sun.management.jmxremote.rmi.port=<port>
-Dcom.sun.management.jmxremote.rmi.port=
设置要使用的RMI端口。然后可以在安全组中启用该端口


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

这对我很有用。在服务器上设置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
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.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
ssh-i/path/to/key-Dusername@public_dns_address
启动VisualVM:

jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:<some port> -J-Djava.net.useSystemProxies=true
jvisualvm-J-Dnetbeans.system\u socks\u proxy=localhost:-J-Djava.net.useSystemproxy=true
将远程连接添加到服务器。使用为JMX指定的端口添加JMX连接


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

我发现端口没有意义,因为连接是SSL安全的。我有一个私钥,不知道如何与JConsole或VisualVMT一起使用。这应该是公认的最佳答案,因为它不需要SSH隧道,也不需要打开0-65535之间的整个端口范围(正如我在别处看到的那样)。我没有尝试过,但据我所知,它使用SSH作为本地代理。我有8个不同的EC2实例,这意味着我需要运行8个不同的VisualVM?没错。在这种情况下,我所做的是打开一个VisualVM来获取我想要查看的MBean的详细信息,然后编写一个脚本从每台机器本地获取它们。具体来说,我安装了JRuby并使用JMXgem在本地机器上查询JMX,并将结果打印到控制台,或者将结果发送到远程系统进行收集。这就在脚本运行的系统上创建了一点负载,所以你需要考虑一下。只要一抬头,你就可以完全不受保护地离开你的JMX服务器(SSL关闭,身份验证关闭)。