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的 值减一


目录
相关文章
|
监控 网络协议 Unix
Supervisor的简单使用
Supervisor的简单使用
90 0
Supervisor的简单使用
|
Java
IDEA 2022 SpringBoot启动 (Services) Run Dashboard 不显示 端口号
IDEA 2022 SpringBoot启动 (Services) Run Dashboard 不显示 端口号
3682 0
IDEA 2022 SpringBoot启动 (Services) Run Dashboard 不显示 端口号
|
6月前
|
Java 应用服务中间件
SpringBoot 启动参数设置环境变量、JVM参数、tomcat远程调试
SpringBoot 启动参数设置环境变量、JVM参数、tomcat远程调试
387 0
|
6月前
|
监控 Java
Zabbix【部署 02】Zabbix-Java-Gateway安装配置使用(使用Zabbix-Java-Gateway通过JMX监控Java应用程序实例分享)
Zabbix【部署 02】Zabbix-Java-Gateway安装配置使用(使用Zabbix-Java-Gateway通过JMX监控Java应用程序实例分享)
349 0
|
Java Spring 容器
SpringBoot中是如何创建WebServer的?
SpringBoot中是如何创建WebServer的?
165 0
|
运维 监控
JPOM - Server启动流程&脚本初始化源码解析
JPOM - Server启动流程&脚本初始化源码解析
220 0
|
Java 测试技术 Apache
Jmeter的简单使用
Jmeter的简单使用
128 0
Jmeter的简单使用
|
Java 应用服务中间件 微服务
SpringBoot源码分析系列之四:如何启动内嵌Tomcat
SpringBoot相信很多同学都非常了解,实际工作中也经常使用到。但是不知道大家在使用过程中有没有想过一个问题,SpringBoot内嵌tomcat到底是怎么启动的?内嵌tomcat启动服务的好处又是什么呢?本文将结合SpringBoot源码探讨下这些问题。
SpringBoot源码分析系列之四:如何启动内嵌Tomcat
|
程序员 PHP 容器
hyperf| hyperf 源码解读 1: 启动
hyperf| hyperf 源码解读 1: 启动
1156 0
|
监控 应用服务中间件 Java
下一篇
无影云桌面