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

3
我正在尝试使用带JRE 1.8.0的VisualVM 1.3.8连接到远程JMX服务。使用相同参数使用JConsole进行连接完美运行,但是使用VVM尝试连接时仅停留在“添加服务”阶段。我查看了VVM日志,但日志中没有任何记录。
我还在VVM远程JMX文档(链接)中读到:
注意:要检索并显示运行在远程主机上的应用程序信息,远程主机上需要运行jstatd实用程序。
这让我感到困惑,因为我可以使用JConsole进行远程JMX连接,并且据我所知,远程主机上没有运行jstatd。
是否有人知道jstatd仅作为远程JMX客户端仅适用于VVM的需求?由于相同的客户端和服务器端点之间可以使用JConsole进行JMX连接,因此网络/防火墙等方面没有问题。
除此之外,我真的很困惑其他地方该去哪里寻找线索?

我刚刚尝试了使用JDK 8分发的bin文件夹中的jvisualvm进行相同的测试,JMX连接在那里也能完美工作。有人知道由java.net分发的VisualVM和Oracle JDK之间的区别吗?java.net表示:“JDK 8已经发布,并可在此处下载。它包含基于VisualVM 1.3.6的Java VisualVM工具。”因此,也许我的问题与VVM的版本有关? - Stephen Hartley
当本地连接时,可以使用附加API,它使用文件系统(在Linux下)而无需网络访问。 - Thorbjørn Ravn Andersen
1个回答

1

当我从Java 7切换到8时,我遇到了与使用SOCKS相关的问题,我通过VisualVM ->工具 ->插件 ->设置 ->代理设置更新代理设置。但是,我通过以下方式成功解决了问题:

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

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

请注意,您显然可以在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>


如果有人对Tomcat有疑问,这些代码应该放在setenv.sh文件中。 - naoru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接