java - 如何通过知道进程 ID 连接到本地 JMX 服务器?

标签 java service process jmx

这背后的动机是使用 JMX 管理本地 java 服务,而不需要像 java 服务包装器这样更重量级的东西。

每个服务都以 -Dcom.sun.management.jmxremote 启动,这意味着“JVM 配置为作为本地(同一机器)JMX 服务器工作。” (有关详细解释,请参阅 here)。

我尝试了 Attach API , 但决定反对它,因为它没有与 Java SE6 捆绑在一起,并且不可能将它与 Maven 集成。

最佳答案

我发布这个问题是为了分享解决方案,因为我没有在这里看到它(问答)。 这里的关键是使用ConnectorAddressLink.importFrom(pid) 来获取地址。

public static MBeanServerConnection getLocalMBeanServerConnectionStatic(int pid) {
    try {
        String address = ConnectorAddressLink.importFrom(pid);
        JMXServiceURL jmxUrl = new JMXServiceURL(address);
        return JMXConnectorFactory.connect(jmxUrl).getMBeanServerConnection();
    } catch (IOException e) {
        throw new RuntimeException("Of course you still have to implement a good connection handling");
    }
}

关于java - 如何通过知道进程 ID 连接到本地 JMX 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252914/

相关文章:

java - BigQuery,如何以编程方式定义类似字段的数组?

java - 如何在android中创建队列?

java - 从 WADL 生成 java stub

c - 在 C 中使用两个 fork() 时如何利用每个进程

java - ERROR : Cannot load this JVM TI agent twice, 检查您的 java 命令行是否有重复的 jdwp 选项

java - 尝试为文本区域创建滚动 Pane

java - 在 html 中加载带有 Jess 规则的 java 小程序

android - 作为后台服务的报警服务

bash - 如何将多个命令通过管道传输到 shell 中的单个命令? (嘘,庆典,...)

linux - 如何限制单个专用centos6服务器上的帐户资源使用