我在亚马逊云端的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完全不熟悉,我甚至不确定这些东西是什么意思,但我在某个博客文章中看到过。我现在正在抓稻草。)
答案 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