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

时间:2010-10-08 15:36:13

标签: java jmx visualvm jvisualvm

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

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

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

1 个答案:

答案 0 :(得分:13)

不幸的是,无法将随机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的数据)。