visualvm 可以通过 JMX 自动连接到远程进程吗?

Posted

技术标签:

【中文标题】visualvm 可以通过 JMX 自动连接到远程进程吗?【英文标题】:Can visualvm connect automatically via JMX to a remote process? 【发布时间】:2010-10-08 15:36:12 【问题描述】:

我有一个在远程机器上运行的 Java 进程,该进程设置了一些 mbean。我还有jstatd 以与Java 进程相同的用户身份在该机器上运行。 (可以以编程方式或使用-Dcom.sun.management.jmxremote... 等设置mbean,这似乎没有什么区别)。

VisualVM 能够与它自动发现的进程建立jstatd 连接,但这意味着我无法访问 mbean 或例如 CPU 历史图表。或者,我可以创建一个显式 JMX 连接,这为我提供了常用的有用工具范围,但我希望在应用程序启动时为其分配一个随机 JMX 端口,此配置不能是静态的。

有没有办法让 VisualVM 通过 JMX 自动连接到我的进程?这将要求它自动发现 JMX 端口,但我原以为 jstatd 可以做到这一点。有谁知道 Visualvm 的任何插件可以自动执行此操作?

【问题讨论】:

【参考方案1】:

很遗憾,无法将随机 JMX 端口分配给远程应用程序。您可以使用

启动远程应用程序
-Dcom.sun.management.jmxremote.port=<fixed port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

VisualVM 将能够通过Jvmstat(由 jstatd 提供)读取此配置,并自动打开与远程应用程序的 JMX 连接。因此,您需要为远程应用程序分配固定端口。一旦你拥有它,一切都会正常工作,VisualVM 将通过 JMX 自动连接到你的应用程序(实际上它会结合来自 Jvmstat 和 JMX 的数据)。

【讨论】:

像大多数socket调用一样,你可以设置端口为0,它会被动态选择,然后jstatd会通过...

以上是关于visualvm 可以通过 JMX 自动连接到远程进程吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java Mission Control - 访问被拒绝连接到远程

VisualVM 无​​法分析;连接和其他选项卡工作,但采样器选项卡给出:“无法创建 JMX 连接”

利用VisualVm和JMX远程监控Java进程

VisualVM 的问题 - 连接到远程主机时

如何通过 JMX 连接到远程 Docker 容器

如何通过 JMX 远程连接到 Dataproc 上的 Spark 工作器