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".
我也试过使用远程进程连接:
- 服务:jmx:http-remoting-jmx://localhost:9990
- 服务:jmx:远程+http://localhost:9990
- 本地主机:9990
但这行不通。
我尝试设置 jvm 变量:
- -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
和 属性 :
- spring.jmx.enabled=真
同样不行。
我可以用 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。
我有一个 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".
我也试过使用远程进程连接:
- 服务:jmx:http-remoting-jmx://localhost:9990
- 服务:jmx:远程+http://localhost:9990
- 本地主机:9990
但这行不通。
我尝试设置 jvm 变量:
- -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
和 属性 :
- spring.jmx.enabled=真
同样不行。
我可以用 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。