【问题标题】:Why does JMX connection to Amazon EC2 fail?为什么 JMX 连接到 Amazon EC2 失败?
【发布时间】:2013-10-08 11:31:21
【问题描述】:

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

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

【问题讨论】:

标签: amazon-ec2 port jmx visualvm


【解决方案1】:

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

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

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

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

【讨论】:

  • 我发现端口没有意义,因为连接是 SSL 安全的。我有一个私钥,不知道如何将它与 JConsole 或 VisualVM 一起使用
  • 这应该是公认的最佳答案,因为它不需要 SSH 隧道或打开 0-65535 的整个端口范围(正如我在其他地方看到的那样)。
【解决方案2】:

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

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

【讨论】:

  • 我没试过,但据我了解它使用 ssh 作为本地代理。我有 8 个不同的 EC2 实例,这意味着我需要运行 8 个不同的 VisualVM?
  • 没错。在这种情况下,我所做的是打开一个 VisualVM 以获取有关我想要查看的 MBean 的详细信息,然后编写一个脚本以从每台机器本地获取它们。具体来说,我安装了 JRuby 并使用 JMX gem 在本地机器上查询 JMX 并将结果打印到控制台,或者将它们发送到远程系统进行收集。这会在运行脚本的系统上产生一点负载,因此您需要考虑这一点。
  • 提醒一下——您的 JMX 服务器完全不受保护(SSL 关闭,身份验证关闭)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 2012-05-11
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
相关资源
最近更新 更多