15

我在监控远程 Tomcat 进程时遇到问题。我正在尝试使用 Java 6 版本的JConsole/JVisualVM

我在具有适当安全策略的远程服务器上运行了 jstatd。该过程已启动并且 TCP 连接可用。

当我尝试通过 JConsole 连接时,我得到'Connection Failed:jmxrmi'.

当我尝试通过 VisualVM 连接时,我添加了主机名,我的右键单击选项是“添加 JMX 连接”。从文档中我不清楚这是否是我期望看到的。当我尝试连接时,我得到:

'Cannot connect using service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi'.

因此,文档建议我只需要远程运行 jstatd 即可在 VisualVM 中进行监控,而 UI 则要求 jmxrmi .. 是否相同?我尝试使用 jmx rmi 选项设置 tomcat,但我也超时,但我知道这不是防火墙问题。

如果有人成功地以这种方式连接了远程 Tomcat 进程,并且可以描述如何,那将对我有很大帮助。

4

5 回答 5

15

通常你需要确保你在 JAVA_OPTS 中指定了服务器的 ip 地址。否则,JMX 似乎将向客户端发送回指令以重新连接到不同端口上的服务器,如果它没有提供给客户端的 IP 地址,则连接失败。

对此的论据是:

-Djava.rmi.server.hostname=1.2.3.4

您可以在此设置过程的演练中找到更多详细信息。

于 2012-02-05T22:38:28.717 回答
14

您需要启用 Tomcat VM 的管理扩展。通常这意味着传入如下内容:

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

当然,如果您按照上述方式执行此操作,请确保您的 Tomcat 在 Internet 上不可见,或者端口被防火墙阻止远程访问,或者采取类似的安全措施来避免端口被扫描和泄露。否则使用身份验证选项。

于 2009-06-27T00:30:20.263 回答
2

我实际上只是自己解决了这个问题并弄清楚了。

我敢打赌,问题在于 RMI 连接——您无法预测它将使用哪些端口,因此您无法让它与防火墙一起使用。

解决方法是使用 SSH 代理:

  1. SSH 到您的应用程序正在运行的框,但使用 -D 选项,如下所示:

    ssh 用户@remoteHost -D 9999

    这将在您的本地计算机上的端口 9999 上启动一个 socks 代理。

  2. 打开 JVisualVM 并在首选项中的“网络”下将其配置为在 localhost 的端口 9999 上使用 socks 代理。

如果您执行上述操作,那么您应该能够正常连接到远程计算机,并且由于所有 RMI 流量现在都通过 SSH 代理,它可以通过防火墙并且运行良好。

祝你好运 :-)

于 2014-12-31T12:54:55.380 回答
2

JMX 端口通常将数据发送到另一个端口,因此您需要通过执行 lsof -p -n | 找到该端口号 grep TCP 并启用对该端口的权限,然后尝试连接到远程 JMX 代理。

于 2012-03-14T14:07:16.837 回答
1

我认为这是一个防火墙问题。我的服务器没有打开所有端口,因此按照此处的说明使用我拥有的一个开放端口,我能够使其工作。

http://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx

于 2009-06-29T17:42:15.843 回答