JMX介绍及简单使用

简介: Java Management Extensions(JMX)是Java平台中一个重要的管理和监控技术,通过使用JMX,开发人员可以轻松地实现对Java应用程序进行监控和管理。本文将介绍JMX的基本概念、架构及其在Java应用程序中的使用方法。

Java Management Extensions(JMX)是Java平台中一个重要的管理和监控技术,通过使用JMX,开发人员可以轻松地实现对Java应用程序进行监控和管理。本文将介绍JMX的基本概念、架构及其在Java应用程序中的使用方法。


一、JMX概述


JMX是Java平台的一个标准规范,它定义了一组API和协议,用于管理和监控Java应用程序的运行状态。JMX提供了一种统一的方式来访问Java应用程序的各种资源,包括操作系统、虚拟机、应用程序服务器和自定义应用程序组件等。


JMX的主要功能包括:


  1. 监控和管理Java应用程序的运行状态:JMX为Java应用程序提供了一种标准化的方式来访问应用程序内部的各种状态信息,比如内存使用情况、线程状态、GC情况等等。这些信息可以用于监控和管理应用程序的性能和可用性。
  2. 远程访问和管理:JMX支持通过网络远程访问和管理Java应用程序,使得开发人员可以随时随地地监控和管理应用程序的运行状态。
  3. 自定义MBean:JMX允许开发人员创建自定义MBean(Managed Bean),通过MBean可以暴露应用程序内部的状态信息和操作,从而方便开发人员进行监控和管理。


二、JMX架构


JMX的架构由三个主要组件组成:


  1. MBean: MBean是Managed Bean的缩写,它是JMX中的核心概念。MBean用于暴露应用程序内部的状态信息和操作,比如内存使用情况、线程状态、GC情况等等。MBean可以被动态地创建、注册和注销,使得开发人员可以非常方便地将应用程序的状态信息暴露给JMX。


  1. MBean Server: MBean Server是JMX的核心组件,它提供了MBean的注册、查询和调用等功能。MBean Server负责管理所有注册到它上面的MBean,并通过JMX协议向外部提供服务。在Java应用程序中,每个JVM只有一个MBean Server实例。


  1. JMX Agent: JMX Agent是JMX的客户端组件,它允许开发人员通过网络远程访问和管理MBean Server。JMX Agent可以以独立进程的形式运行,也可以作为Java应用程序的一部分嵌入到应用程序中。


三、JMX使用方法


在Java应用程序中使用JMX需要遵循以下步骤:


  1. 创建MBean接口:首先需要定义一个MBean接口,该接口用于暴露应用程序内部的状态信息和操作。MBean接口可以使用Java接口或者抽象类来定义,其中每个方法都对应一个MBean的属性或操作。


@MXBean
public interface CounterMBean {
    public int getCounter();
    public void setCounter(int counter);
    public void increase();
    public void decrease();
}
  1. 实现MBean接口:接下来需要编写一个实现MBean接口的类,该类负责实现MBean接口中定义的各种方法,并提供应用程序内部的状态信息和操作。


public class CounterImpl implements CounterMBean {
    private int counter = 0;
    @Override
    public int getCounter() {
        return counter;
    }
    @Override
    public void setCounter(int counter) {
        this.counter = counter;
    }
    @Override
    public void increase() {
        this.counter += 1;
    }
    @Override
    public void decrease() {
        this.counter -= 1;
    }
}
  1. MBean 允许通过使用 JMX 代理来管理资源。每个 MBean 都会暴露了底层资源的一部分属性和操作:
    可以读写的属性,实现包含属性的 setter 和 getter 方法,在这为 counter。 可以调用的方法,可以向它提供参数或者获取返回值,在这有 increase 和 decrease。


  1. 创建MBeanServer实例:在Java应用程序中,每个JVM只有一个MBeanServer实例。因此,需要先创建一个MBeanServer实例,并将MBean注册到MBeanServer中。



public class CounterManagement {
    public static void main(String[] args) throws Exception {
        // 获取 MBean Server
        MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
        // 创建 MBean
        CounterMBean counter = new CounterImpl();
        counter.setCounter(0);
        // 注册
        ObjectName objectName = new ObjectName("com.example.jmx.service.impl:type=CounterImpl, name=MyCounterMBean");
        platformMBeanServer.registerMBean(counter, objectName);
        // 防止退出
        while (true) {
            Thread.sleep(3000);
            System.out.println("[INFO] 休眠 3s ..............");
        }
    }
}

ObjectName 由 domain:key 格式构成:


  • domain:可以是任意字符串,但根据 MBean 命名约定,一般使用 Java 包名(避免命名冲突)
  • key:以逗号分隔的’key=value’键值对列表


我们一般会定义两个 key:

  • type=MXBean 接口的实现类的类名,我使用的是 CounterImpl
  • name=自定义的名字,这里我使用的是 MyCounterMBean


四、jmx连接


jmx 连接可以通过java程序来获取信息,也可以通过 java 自带的 jconsole 工具来连接,下面我将使用 jconsole 来连接以上运行的程序


jmx1.png


选择上面的包名后点击连接


jmx2.png


点击 MBean 可以看到类型和 自定义的名称 MyCounterMBean,属性 Counter 的值为 0,下面有操作,点击 increase 可以增加 1 ,点击 decrease 可以将 counter的 值减一


目录
相关文章
|
12月前
|
安全
UUID 与 MD5 重复概率深度分析
UUID与MD5均生成128位值,理论碰撞概率相同。但UUIDv4基于随机生成,实际重复概率极低,适合唯一标识;MD5依赖输入数据,存在已知安全漏洞,碰撞风险更高,不推荐用于安全敏感场景。
|
存储 算法 数据库
Python高级数据结构——树(Tree)
Python高级数据结构——树(Tree)
1112 1
|
消息中间件 NoSQL Java
spring boot2升级boot3指南
本文介绍了如何将Spring Boot 2.x升级至Spring Boot 3.x,涵盖使用OpenRewrite自动化重构工具进行代码转换、依赖版本升级、配置属性调整及常见问题处理等内容,帮助开发者高效完成升级工作。
3107 7
|
开发者 知识图谱
免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
今天,阿里技术公布一波阿里P8、P9技术大牛的思维模型,将他们的思维模式呈现出来。你可以在阿里资深专家职业生涯的真切感悟中,找到应对危机的最佳方法。《阿里工程师的自我修养》现已正式公开,可免费下载阅读。
136803 1
免费下载!《阿里工程师的自我修养》公开10位阿里大牛解决问题的思维方式
|
人工智能 搜索推荐 算法
用AI提示词搞定基金定投:技术人的理财工具实践
本文将AI提示词工程应用于基金定投,为技术人打造一套系统化、可执行的理财方案。通过结构化指令,AI可生成个性化定投策略,覆盖目标设定、资产配置、风险控制与动态调整,帮助用户降低决策门槛,规避情绪干扰,实现科学理财。
3612 13
|
Java Spring
SpringBoot: 启动Banner在线生成工具
SpringBoot: 启动Banner在线生成工具
42900 1
SpringBoot: 启动Banner在线生成工具
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
153549 0
|
数据采集 机器学习/深度学习 边缘计算
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
本文详解爬虫代理设置常见报错场景及解决方案,涵盖IP失效、403封禁、性能瓶颈等问题,提供动态IP代理的12种核心处理方案及完整代码实现,助力提升爬虫系统稳定性。
691 0
|
存储 算法 BI
xxljob本地运行
xxljob本地运行
1884 4
xxljob本地运行
|
Java 编译器
强烈推荐的一款 Java 反编译工具:JAD
强烈推荐的一款 Java 反编译工具:JAD
8038 0
强烈推荐的一款 Java 反编译工具:JAD