2012-05-11 165 views
8

我在亚马逊的云中的Linux服务器上运行Tomcat 6。我正尝试从我的办公室的Mac上用VisualVM连接到它。我允许打开桌面和服务器之间的所有TCP端口,但我无法让VisualVM做任何事情。调试VisualVM远程连接

在Linux中,我已经开始用Tomcat的:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9191 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

在我的Mac,我推出的VisualVM,选择文件 - >新建JMX连接...

我进入amazonhostname.com: 9191在箱子里。它说“添加amazonhostname.com:9191 ...”并在那里等待几分钟后才超时。

从我的Mac,我可以“telnet amazonhostname.com 9191”就好了,我尝试了一些其他随机端口,他们都工作。我相当确信这不是防火墙问题,除非我需要打开UDP或ICMP或类似的东西。 (真的吗??)

服务器上的catalina.log或我的Mac上与jmx相关的系统控制台中没有任何内容。服务器上的netstat显示9191和其他一些端口在所有接口上打开。

远程服务器上没有jstatd。这是JMX的先决条件吗? (我对Java完全陌生,我甚至不知道这些东西是什么意思,但是我在某个地方的博客文章中看到了它,我现在正在抓秸秆。)

+0

你确定iptables没有阻塞你的linux系统上的连接吗?编辑:我看到你可以telnet - 好吧,从头开始。 –

+1

你需要看的另一件事是RMI主机名 - 看看:http://stackoverflow.com/questions/9985293/how-do-i-use-jconsole-to-connect-to-ec2 –

+1

Jstatd不需要。正如Greg建议尝试将-Djava.rmi.server.hostname = the.public.ip添加到Tomcat JVM参数。 –

回答

18

在VM启动之前设置主机名属性:

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

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

+0

不幸的是,它不适用于像Elastic Beanstalk这样的自动缩放。 – mwoodman

+0

@mwoodman:我没有使用EB,但是你知道为什么这不适用(让后续的SO搜索者知道)吗? –

+1

我认为-Dcom.sun.management.remote.ssl = false应该是-Dcom.sun.management.jmxremote.ssl = false –