无法使用 VisualVM 连接到远程 JMX,但使用 JConsole 可以



我正在尝试使用带有JRE 1.8.0的VisualVM 1.3.8连接到远程JMX服务。 与JConsole建立完全相同的连接可以完美地工作,但是尝试在VVM中使用相同的参数只是在"添加服务"阶段挂起。 我查看了 VVM 日志,但实际上没有任何记录。

我还在VVM远程JMX文档中阅读了以下内容:

注: 要检索和显示有关远程主机上运行的应用程序的信息,jstatd 实用程序需要在远程主机上运行。

这让我感到困惑,因为我可以使用JConsole进行远程JMX连接,而且据我所知,jstatd没有在远程上运行。

有谁知道jstatd是否仅要求VVM作为远程JMX客户端? 由于JMX连接可以在相同的客户端和服务器端点之间与JConsole建立,因此网络/防火墙等没有问题。

除此之外,我真的很困惑还能在哪里寻找线索?

当我从 Java 7 切换到 8 时,我遇到了同样的麻烦,同时使用 SOCKS 通过 VisualVM -> Tools -> Plugins -> Settings -> Proxy Settings 更新代理设置。但是,我在以下方面取得了成功:

  1. 使用以下选项运行 JVM:

-Dcom.sun.management.jmxremote.port=<JMX_PORT> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

请注意,您显然可以做一些更安全的事情,包括 w.r.t SSL 和身份验证。

  1. 设置从本地主机到远程服务器的 SOCKS 代理:

ssh -D<SOCKS_PORT> -vvv -N <REMOTE_HOST>

  1. 在本地主机上运行以下命令之一:

jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<SOCKS_PORT> service:jmx:rmi:///jndi/rmi://<REMOTE_HOST:JMX_PORT>/jmxrmi jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<SOCKS_PORT> --openjmx <REMOTE_HOST>

相关内容

  • 没有找到相关文章

最新更新