我在亚马逊云的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-> New JMX Connection...。

我在框中输入amazonhostname.com:9191。它会显示“正在添加amazonhostname.com:9191 ...”,并在那儿坐了几分钟,然后才超时。

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

服务器上的catalina.log或Mac上的系统控制台中没有与jmx相关的内容。服务器上的netstat显示9191,并且所有其他端口在所有接口(interface)上打开。

远程服务器上没有jstatd。这是JMX的前提条件吗? (我对Java完全陌生,我什至不知道这些含义是什么,但是我在某处的博客文章中看到了它。我现在正在抓稻草。)

最佳答案

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

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

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

关于java - 调试VisualVM远程连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10543882/

10-12 17:16