当前位置: 首页 > 面试题库 >

如何远程访问Spring-boot JMX

柳豪
2023-03-14
问题内容

我知道spring会自动公开JMX bean。我可以使用VisualVM在本地访问它。

但是在产品上,如何使用JMX bean远程连接到应用程序?是否有默认端口,或者我还应该定义其他任何内容?


问题答案:

默认情况下,JMX可在本地自动访问,因此在jconsole 本地运行将检测到所有本地Java应用程序而不会暴露端口。

要通过JMX 远程访问应用程序,必须指定一个RMI注册表端口。要知道的是,在连接时,JMX在该端口上初始化,然后在随机的高端口上建立数据连接,如果中间有防火墙,这将是一个很大的问题。

要强制JMX在建立的端口上重新连接,你有两种选择:

选项1:命令行

-Dcom.sun.management.jmxremote.port=$JMX_REGISTRY_PORT 
-Dcom.sun.management.jmxremote.rmi.port=$RMI_SERVER_PORT

如果你使用的是Spring Boot,则可以将其放入(appname).conf与(appname).jar部署一起存在的文件中。

选项2:Tomcat / Tomee配置

配置一个JmxRemoteLifecycleListener:

Maven Jar:

<dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina-jmx-remote</artifactId>
        <version>8.5.9</version>
        <type>jar</type>
    </dependency>

配置你的server.xml:

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
      rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

选项3:以编程方式配置

@Configuration
public class ConfigureRMI {

    @Value("${jmx.rmi.host:localhost}")
    private String rmiHost;

    @Value("${jmx.rmi.port:1099}")
    private Integer rmiPort;

    @Bean
    public RmiRegistryFactoryBean rmiRegistry() {
        final RmiRegistryFactoryBean rmiRegistryFactoryBean = new RmiRegistryFactoryBean();
        rmiRegistryFactoryBean.setPort(rmiPort);
        rmiRegistryFactoryBean.setAlwaysCreate(true);
        return rmiRegistryFactoryBean;
    }

    @Bean
    @DependsOn("rmiRegistry")
    public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception {
        final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
        connectorServerFactoryBean.setObjectName("connector:name=rmi");
        connectorServerFactoryBean.setServiceUrl(String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", rmiHost, rmiPort, rmiHost, rmiPort));
        return connectorServerFactoryBean;
    }
}

你将看到的窍门是serviceUrl在其中指定jmx:rmi主机/端口和jndi:rmi主机/端口。如果同时指定两者,则不会出现随机的高“问题”。



 类似资料:
  • 简单来说,试着从任何计算机上通过Kibana可视化你的数据,但是一旦你到达Kibana仪表板,你就会看到0次点击/结果。 我目前在没有GUI的Linux机器上有Elasticsearch(不允许简单地更改到GUI)。 我正在尝试使用Kibana(Windows机器上的Internet Explorer)访问我的索引。 我也有Kibana运行在Linux机器(./Kibana)上,除非启动(./Ki

  • 我有一个Maven Spring 4应用程序,我在 http://localhost:9292 的本地 Jetty 服务器上运行。我还有一个在 http://localhost:9990 运行的 JBoss EAP 服务器,我在其上创建了一个 JMS 主题。 但是我不知道如何从我的Spring应用程序中访问JMS元素。 在这篇文章的末尾是JBoss EAP 7配置文件中的一些元素独立.xml(消息

  • 我是infinispan的新手,通过实验学习。在尝试访问不同名称的远程缓存失败后,我需要一些帮助。下面是我的infinispan客户端-服务器模式未嵌入的场景。 1) 我在infinispan集群中启动了node1,并将默认远程缓存名称设置为node1\u cache--Hotrod服务器已启动 2) 已在infinispan群集中启动node2,并将默认远程缓存名称设置为node2\u cach

  • 问题内容: 我已经开发了一个 JAVA SWING应用程序 。我想在安装此应用程序 几台电脑 ,所有 访问互联网 。那么我应该在哪里放置MYSQL数据库?所有这些计算机都应该能够 通过Internet访问相同的数据库。 问题答案: 出于安全性(身份验证授权,加密)和性能的原因,允许直接通过Internet访问数据库不是很常见。在大多数情况下,您将创建一个基于Web的服务器应用程序,该应用程序可以执

  • 本文向大家介绍Oracle 配置远程访问教程,包括了Oracle 配置远程访问教程的使用技巧和注意事项,需要的朋友参考一下 服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 多个IP时,如下: 2.TNS 配置 多个IP时,如下: 3.停止和启动服务 先停止以下服务,然后再启动.

  • 问题内容: 我正在使用JBoss运行客户端/服务器应用程序。 如何连接到服务器JVM的MBeanServer?我想使用MemoryMX MBean来跟踪内存消耗。 我可以使用JNDI查找连接到JBoss MBeanServer,但是java.lang.MemoryMX MBean没有在JBoss MBeanServer中注册。 编辑:要求是从客户端以编程方式访问内存使用情况。 问题答案: 与JBo