调试VisualVM远程连接

时间:2012-05-11 00:28:07

标签: java tomcat jmx visualvm

我在亚马逊云端的Linux服务器上运行Tomcat 6。我正在尝试使用我的办公室Mac上的VisualVM连接到它。我已经允许打开桌面和服务器之间的所有TCP端口,但是我无法让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并选择File - >新的JMX连接...

我在框中输入amazonhostname.com:9191。它说"添加amazonhostname.com:9191..."在超时前坐几分钟。

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

服务器上的catalina.log或Mac上的系统控制台与jmx无关。服务器上的netstat显示9191,其他一些端口在所有接口上打开。

远程服务器上没有jstatd。这是JMX的先决条件吗? (我对Java完全不熟悉,我甚至不确定这些东西是什么意思,但我在某个博客文章中看到过。我现在正在抓稻草。)

2 个答案:

答案 0 :(得分:20)

在VM启动之前设置hostname属性:

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

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

答案 1 :(得分:0)

在RHEL7环境中对我来说很好的方法是使用文档中提供的示例在Tomcat上实现JmxRemoteLifecycleListener。我还打开了防火墙上的端口10001和10002。 JMX Remote Lifecycle Listener