我在监视远程Tomcat进程时遇到问题。我正在尝试使用 JConsole / JVisualVM 的Java 6版本。
我使用适当的安全策略在远程服务器上运行jstatd。该过程已启动,并且TCP连接可用。
当我尝试通过JConsole连接时,我得到'Connection Failed:jmxrmi'
。
当我尝试通过VisualVM连接时,我添加了主机名,我的右键单击选项是“Add JMX Connection”。从文档中我不清楚这是否是我期望看到的。当我尝试连接时,我得到:
'Cannot connect using service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi'.
所以,文档建议我只需要远程运行jstatd来监视VisualVM,而UI要求jmxrmi ..这些是否相同?我尝试使用jmx rmi选项设置tomcat,我也超时,但我知道这不是防火墙问题。
如果有人成功获得了以这种方式附加的远程Tomcat进程,并且可以描述如何,那将对我有所帮助。
答案 0 :(得分:15)
通常您需要确保在JAVA_OPTS中指定服务器的IP地址。否则,似乎JMX将向客户端发回指令以重新连接到不同端口上的服务器,如果它没有给客户端的IP地址,则连接失败。
这个论点是:
-Djava.rmi.server.hostname=1.2.3.4
您可以在此walk through设置过程中找到更多详细信息。
答案 1 :(得分:13)
您需要启用Tomcat VM的管理扩展。通常这意味着传递类似这样的东西:
-Dcom.sun.management.jmxremote.port=8086
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
当然,如果您按上述方式执行此操作,请确保您的Tomcat在Internet上不可见,或者端口受到防火墙远程访问或采取类似的安全措施以避免端口扫描和泄露。否则使用身份验证选项。
答案 2 :(得分:2)
JMX端口通常将数据发送到另一个端口,因此您需要通过执行lsof -p -n |来查找该端口号。 grep TCP并启用该端口的权限,然后尝试连接到远程JMX代理。
答案 3 :(得分:2)
我实际上自己刚刚解决了这个问题并想出来了。
我敢打赌问题是RMI连接 - 您无法预测它将使用哪些端口,因此您无法使用防火墙。
解决方法是使用SSH代理:
SSH到运行应用程序的框但是使用-D选项,如下所示:
ssh user @ remoteHost -D 9999
这将在本地计算机上的端口9999上启动socks代理。
打开JVisualVM并在首选项中,在&#39; network&#39;将其配置为在localhost上使用socks代理,在端口9999上。
如果您执行上述操作,则应该能够正常连接到远程计算机,并且由于所有RMI流量现在都通过SSH代理,因此它可以穿过防火墙并且运行良好。
祝你好运: - )答案 4 :(得分:1)
我认为这是防火墙问题。我的服务器没有打开所有端口,所以按照这里的说明使用我所拥有的一个开放端口,我能够使它工作。
http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx