当前位置: 首页 > 知识库问答 >
问题:

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

商泽宇
2023-03-14

我有一个 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 位于托管 Bean 'metricsEndpoint': 向 JMX 服务器注册为 MBean [portal-ws-jmx:type=Endpoint,name=metricsEndpoint]

当我运行jconsole时,在本地进程列表中,只有JConsole进程和一些灰色的PID。如果我选择了一个灰色的PID,它会显示“此进程中未启用管理代理”。

我还尝试使用远程进程连接:

  • 服务:jmx:http:jmx://localhost:9990
  • 服务:jmx:远程http://localhost:9990
  • localhost:9990

但这行不通。

我尝试设置jvm变量:

  • -Dcom.sun.management。jmxremote-Dcom.sun.management.jmxremote.local.only=false

以及属性:

  • spring.jmx.enabled=true

它也不起作用。

用jconsole读取jmx指标能做什么?

共有2个答案

孟智志
2023-03-14

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

我的问题来自野花。当我运行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。

卢英叡
2023-03-14

下面是我用来生成一个通过JConsole公开事物的有效的spring-boot应用程序(尽管使用Tomcat,而不是Wildfly)的一组命令行参数:

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 上运行并通过端口 9800 访问(在我的情况下)。但是,端口 9811 和 9899 也打开用于处理 JMX(如上所述)。您还需要确保可以通过您可能设置的任何防火墙访问这 3 个端口。

祝你好运。

 类似资料:
  • 试图连接一个简单的JMX监控。托管应用程序和监控工具位于同一台服务器上。当试图连接一个错误 00:30:55610致命http-8080-6 SiteListener:makeJmxConnection:99-java.io。IOException:检索RMIServer存根失败:javax.naming。ServiceUnavailableException[根异常为java.rmi.Conne

  • 使用VisualVM,我可以看到两种类型来连接远程主机。 > jstatd 所以我正在尝试使用JMX,我学习了很多教程,但到目前为止还没有成功。 目前,有我的桌面和一个运行java服务器应用程序的linux盒子。我正在尝试在桌面上设置VisualVM客户端,以查看在linux Box上运行的java应用程序。 我为Linux上的java应用程序在start.sh脚本上添加了以下JAVA_OPTS脚

  • 我试图运行一个连接到本地独立spark集群的java应用程序。我使用start-all.sh以默认配置启动集群。当我转到集群的web页面时,它被启动为OK。我可以用SparkR连接到这个集群,但是当我使用相同的主URL从Java内部连接时,我会得到一条错误消息。 下面是Spark日志中的输出:

  • 我试图连接到一个名为的数据库。所有凭据都位于PHP文件名中,格式为 我正试图用这个连接到数据库 我得到这个错误: 注意:第6行的未定义变量:DB_HOST in/home/content/06/8274306/html/beta/mysuperscript.php 注意:未定义变量:第6行 /home/content/06/8274306/html/beta/mysuperscript.phpDB

  • 我生成了一个。我的SpringMVC Maven Hibernate MySQL应用程序的war文件,该应用程序在本地主机和本地MySQL数据库上运行良好。我配置数据库的方式是通过WebAppConfig。查看应用程序的java文件。属性文件并检索适当的信息。 然后我创建了一个OpenShift帐户并部署了它。war文件。我添加了MySQL和PHPMyAdmin盒带,以便维护数据库。当我试图通过我

  • 我试图连接到mysql数据库从docker图像。然而,这是投掷错误。 下面是我正在使用的docker图像。https://hub.docker.com/_/mysql/ 下面是我用来运行docker映像的命令。 以下是命令的输出 如果我使用docker检查IP并ping该IP,则显示IP不可访问。 如果我尝试使用和我遇到以下错误。 无法加载身份验证插件“缓存\u sha2\u密码”。