Jconsole 无法连接到本地 jmx 应用程序

Jconsole cannot connect to local jmx application

我有一个 Spring 引导项目,我在其中使用 spring-boot-starter-actuator 和 io.dropwizard.metrics.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-core</artifactId>
    </dependency>

它生成我可以使用 url http://myapplication/metrics 访问的指标。 我将应用程序部署在 Wildfly 10 独立服务器上。

我想使用 jmx 读取 jconsole 上的指标。 我将应用程序配置为使用 JMXReporter 发送指标:

@Configuration
@EnableMetrics
public class MetricsConfiguration extends MetricsConfigurerAdapter {
    @Override
    public void configureReporters(MetricRegistry metricRegistry) {
        registerReporter(JmxReporter.forRegistry(metricRegistry)
                .build())
                .start();
    }
}

当我启动服务器并部署应用程序时,日志显示:

o.s.b.a.e.j.EndpointMBeanExporter Located managed bean 'metricsEndpoint': registering with JMX server as MBean [portal-ws-jmx:type=Endpoint,name=metricsEndpoint]

当我运行jconsole时,在Local Process列表中,只有JConsole进程和一些灰色的PID。如果我 select 一个灰色的 PID,它会显示 "The management agent is not enable on this process".

我也试过使用远程进程连接:

但这行不通。

我尝试设置 jvm 变量:

和 属性 :

同样不行。

我可以用 jconsole 读取 jmx 指标做什么?

这是我用来生成工作的 spring-boot 应用程序(尽管使用 Tomcat,而不是 Wildfly)的命令行参数集,它通过 JConsole 公开内容:

cmd="$cmd -Dcom.sun.management.jmxremote"
cmd="$cmd -Dcom.sun.management.jmxremote.port=9899"
cmd="$cmd -Dcom.sun.management.jmxremote.rmi.port=9811"
cmd="$cmd -Dcom.sun.management.jmxremote.authenticate=false"
cmd="$cmd -Dcom.sun.management.jmxremote.ssl=false"
cmd="${cmd} -Djava.rmi.server.hostname=<IP_OF_YOUR_SERVER>"

请注意,应用程序在端口 9800 上运行并通过端口访问(在我的例子中)。然而,端口 9811 和 9899 也开放用于处理 JMX(如上所述)。您还需要确保这 3 个端口可以通过您可能设置的任何防火墙访问。

祝你好运

我在这里找到了解决方案: https://dzone.com/articles/remote-jmx-access-wildfly-or

我的问题来自 Wildfly。 当我 运行 jconsole 时,我需要 jboss-cli-client.jar 和 tools.jar 到 jconsole 类路径:

$JAVA_HOME/bin/jconsole -J-Djava.class.path=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/jconsole.jar:/opt/wildfly-8.2.0.Final/bin/client/jboss-cli-client.jar

现在可以了,我可以使用 "service:jmx:remote+http://localhost:9990" 连接到 jmx。