11

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

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

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

4

1 回答 1

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 的数据)。

于 2010-12-16T12:18:16.870 回答