【问题标题】:How do I use Jconsole to connect to EC2?如何使用 Jconsole 连接到 EC2?
【发布时间】:2012-04-16 15:16:42
【问题描述】:

我在我的 macbook 上运行 Jconsole 并尝试连接到 ec2 上没有图形的 linux 终端(仅命令行访问)。

我这样运行我的代码:

java -jar program.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.remote.ssl=false

我读到here 说通过 EC2 访问时出现问题(在我遇到连接问题之后),解决方案似乎是“java.rmi.server.hostname to the public hostname of the instance

我对如何做到这一点有点困惑。我尝试了两件事,一是直接将其放入我的代码中(在 void static main 部分中):

System.setProperty( "java.rmi.server.hostname" , "external_EC2_address" ); //in my real code I have the correct address here

系统接受它(当我创建/上传可运行 jar 时没有错误)。我还在我的实例上打开了防火墙以允许所有 TCP 流量。没有运气。我也尝试将上述语句作为启动程序的标志,但仍然没有运气。

任何想法如何做到这一点?

更新:这将显示我在 Java 中的绿色程度,我更进一步(仍然不起作用)但我意识到将 java -jar filename.jar 然后选项没有给我相同的结果将我的 -jar 放在命令的末尾。我试过了,程序尝试连接,然后说连接失败(在它会立即在登录屏幕上说之前)。

【问题讨论】:

    标签: java amazon-ec2 rmi jconsole


    【解决方案1】:

    在虚拟机启动前设置主机名属性:

    java -Dcom.sun.management.jmxremote \
         -Dcom.sun.management.jmxremote.port=9005 \
         -Dcom.sun.management.jmxremote.authenticate=false \
         -Dcom.sun.management.remote.ssl=false \
         -Djava.rmi.server.hostname=the.public.ip \
         -jar program.jar
    

    将相关规则添加到您的安全组。

    最后,确保 iptables 已停止,因为这可能是您无法从外界获得连接的原因。以 root 身份(或使用 sudo ...):

    # service iptables stop
    

    【讨论】:

    • 感谢您的回答。我按照您写的内容进行了操作,但仍然出现同样的错误。
    【解决方案2】:

    您需要在 security group 中为您的实例打开 JMX 远程端口(根据上面的示例为 9005)。

    【讨论】:

    • 我已经这样做了。为了安全起见,我也打开了 0 - 65535。
    • 我无法从上面判断的唯一另一件事是您是否将 java.rmi.server.hostname 设置为实例的公共主机名(通常格式类似于 ec2-xxx- yyy-zzz-aaa.compute-1.amazonaws.com,其中 xxx-yyy-zzz-aaa 是公共 IP 地址)。如果你已经这样做了,我很难过,对不起。
    • 你的权利我使用公共主机名连接(这是我用于 ssh 的)ec2-xxx。我得到了一个 IP 地址并试了一下,但仍然是同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2017-01-31
    • 2016-07-15
    • 2012-11-17
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多