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 - 访问被拒绝连接到远程