如何远程访问Spring-boot JMX

2024-03-16

我知道 spring 自动公开 JMX beans。我能够使用 VisualVM 在本地访问它。

但是在产品上我如何使用它的 JMX beans 远程连接到应用程序?是否有默认端口或者我应该另外定义什么?

谢谢, 射线。


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

通过 JMX 访问应用程序remotely您必须指定 RMI 注册表端口。需要知道的是,连接时,JMX 在该端口上进行初始化,并且then建立数据连接随机高端口,如果中间有防火墙,这将是一个大问题。 (“嘿,系统管理员,打开所有内容,好吗?”)。

要强制 JMX 连接回您已建立的同一端口,您有以下几个选项。注意:您可以对 JMX 和 RMI 使用不同的端口,也可以使用相同的端口。

选项 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 https://tomcat.apache.org/tomcat-7.0-doc/config/listeners.html#JMX_Remote_Lifecycle_Listener_-_org.apache.catalina.mbeans.JmxRemoteLifecycleListener:

Maven 罐子:

    <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 主机/端口。如果您同时指定两者,则不会遇到随机高“问题”。

Edit:为了使 JMX 远程处理正常工作,您需要做出有关身份验证的决定。最好分 3 个不同的步骤来完成:

  1. 基本设置与-Dcom.sun.management.jmxremote.authenticate=false then
  2. 添加一个 密码文件(-Dcom.sun.management.jmxremote.password.file). 看 此处获取说明。 https://docs.oracle.com/en/java/javase/11/management/monitoring-and-management-using-jmx-technology.html#GUID-08484F70-31A5-4B87-A7DD-2BCCD2E6580D + -Dcom.sun.management.jmxremote.ssl=false进而
  3. 设置 SSL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何远程访问Spring-boot JMX 的相关文章

随机推荐

  • 播放更改RUNNING_PID文件路径

    我试图将 RUNNING PID 文件存储在 var run 而不是根目录 尝试了以下建议的所有选项 关于这个主题的另一个问题 https stackoverflow com questions 28351405 restarting pl
  • 翻转Python字典中的键和值

    我有一本名为 z 的字典 看起来像这样 0 0 28209479177387814 0 19947114020071635 0 10377687435514868 0 07338133158686996 1 0 28209479177387
  • microsoft Visual Studio scrum 2.0 与 MSF for Agile Software Development 6.0 有什么区别

    Microsoft Visual Studio Scrum 2 0 与 MSF for Agile Software Development 6 0 之间有什么区别 我希望获得有关用于 Visual Studio 和 TFS 进行敏捷开发的
  • 根据概率分布得到结果

    在浏览器游戏中 我们有根据其概率发生的项目 P i1 0 8 P i2 0 45 P i3 0 33 P i4 0 01 我们如何在 php 中实现一个根据概率返回随机项的函数 edit 这些物品有一个称为稀有度的属性 其范围从 1 到 1
  • 如何在 Django 中将当前日期设置为输入类型 = 日期形式

    我一直在尝试使表单中的日期字段在呈现时显示当前日期 但我未能找到解决这个问题的正确方法 请找到下面的代码 HTML 文件
  • 捆绑程序:不支持在使​​用系统 gem 时使用自定义路径

    我在用GitLab CI CD建立我的Rails应用 我注意到我的构建失败了Using a custom path while using system gems is unsupported错误 之前工作得很好 尝试检查较新的更新版本 但
  • 在 Google Colab 上安装 Spark 时出错

    我在 Google Colab 上安装 Spark 时遇到错误 它说 tar spark 2 2 1 bin hadoop2 7 tgz 无法打开 没有这样的文件或目录tar 错误不可恢复 立即退出 这是我的步骤 apt get insta
  • 如何删除具有特定行号的数据(sqlite)

    我有一个表人员 姓名 地址 电话 我的表有 2000 多行 我想删除 1000 行 查询情况如何 我假设您想要删除 前 1000 行 因为 select 查询结果的未排序顺序没有排序参数 也没有条件 在这种情况下您做错了 但是 作为一项学术
  • Google Mirror API 视频

    google glassmirror API 上的视频路线图是什么 API 是否允许将视频传输到设备或从设备传输视频 如 glass 演示视频所示http www youtube com watch v v1uyQZNg2vE http w
  • CMD 不在 Dockerfile 中的 ENTRYPOINT 之后运行

    所以我有一个 docker 文件 它可以执行以下操作 ENV ENV ENV ENV SERVICE NAME SERVICE NAME USER app ENV HOME home app COPY target home app tar
  • Xcode 4 中的活动构建配置在哪里设置

    我的项目中有 3 个配置 Debug Distribution AdHoc 和 Distribution AppStore 在 Xcode 3 中 我们有一个列表可以在构建和运行之前选择设备 版本 配置和目标 现在 对于 Xcode 4 我
  • 使用正则表达式删除字符之前或之后的空格

    我是正则表达式的新手 我想找到一个很好的解决方案来替换之前或之后的空格 我的子字符串中的 char 我有类似的字符串 Path01 Some folder folder 2 我检查了正则表达式 s s 但这对我来说是不正确的 我必须输入输出
  • 如何在 Tensorflow 2.0 中制作不规则批处理?

    我正在尝试从由一维数值数据张量组成的 Tensorflow 数据集创建数据输入管道 我想创建一批不规则的张量 我不想填充数据 例如 如果我的数据采用以下形式 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 我希望我的数据集由以下
  • JList 的自定义组件而不仅仅是字符串

    我一直在尝试更新我的 Java 知识 并且一直在构建一个小型 GUI 程序 但遇到了一些问题 基本上 我有一个JList我目前正在使用来自我的一个类的对象中的字符串填充该类 该类实现了AbstractListModel我们可以称之为我的It
  • 在 Windows 中将多个文件的前缀重命名或删除为每个文件的编号

    我正在尝试更改当前文件夹中的所有文件名 并且我正在尝试通过删除文件前缀 每个文件都有一个公共前缀 或将其名称更改为其计数 如果有 5 个文件 则文件名将是 1 txt 2 txt 3 txt 4 txt 5 txt 现在我在cmd中找到了r
  • 如何使用jquery一键选中复选框(3)

    这里我有一堆复选框 比如说 如果我单击任何复选框 我也希望选中接下来的两个复选框 即在两个复选框旁边 table border 1 cellspacing 0 width 450 tr td td tr table
  • 无法通过 group_send 向 Django 通道发送消息

    我想使用 Django Channels 通过通道发送消息 我就是这样做的 我首先创建一个消费者 我能够回显收到的消息 但是 无法将消息发送到特定频道 组 class Consumer AsyncJsonWebsocketConsumer
  • 获取Android中虚拟键盘的高度

    如何获取Android中虚拟键盘的高度 是否可以 我尝试从主窗口获取它 但它给了我应用程序的完整高度 但我想得到键盘的高度 您无法获取键盘高度 但可以获取 View 的高度 这是您真正想要的 并且您将获得提供给当前视图的 onLayout
  • PL/SQL 在整个数据库中搜索字符串

    这不仅仅是一个问题 它还是一个信息共享帖子 我今天遇到一个情况我需要在应用程序的整个数据库中寻找一个刺痛 但不知道它属于哪个表 列 下面是我编写并用于帮助我提出建议的 PL SQL 块 希望它能帮助其他有类似需求的人 Declare i N
  • 如何远程访问Spring-boot JMX

    我知道 spring 自动公开 JMX beans 我能够使用 VisualVM 在本地访问它 但是在产品上我如何使用它的 JMX beans 远程连接到应用程序 是否有默认端口或者我应该另外定义什么 谢谢 射线 默认情况下 JMX 可在本