您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

一文带你彻底了解JMX

时间:2023-10-27 13:58:44  来源:微信公众号  作者:Java技术指北

JAVA管理扩展(JMX)

Java Management Extensions (JMX) 是 Java 技术的一个方面, 它提供了一种标准的方法来管理和监控应用程序、设备、系统对象和在分布式系统中的业务。JMX 可以被用于:

应用场景

JMX 的应用场景非常广泛,以下是一些常见的应用场景:

系统监控:通过 JMX 可以监控系统的 CPU 使用率、内存消耗、线程数等指标,及时发现系统资源使用异常。性能调优:通过 JMX 可以获取应用程序的性能数据,如方法执行时间、请求响应时间等,帮助开发者找出性能瓶颈并进行优化。故障排查:当系统出现故障时,通过 JMX 可以快速定位问题所在,如查看日志、监控线程状态等,提高故障排查效率。安全管理:通过 JMX 可以实现系统的安全控制,如用户认证、访问控制等,确保系统的安全性和稳定性。服务管理:对于分布式系统,通过 JMX 可以监控服务状态、管理服务实例,提高系统的可用性和可维护性。

  1. 监控应用程序性能 通过收集和分析MBean的信息,JMX可以帮助我们了解应用程序的性能状况,例如CPU使用率、内存使用情况、线程状态等。这些信息对于优化应用程序性能和排查问题非常有帮助。
  2. 诊断应用程序问题 当应用程序出现故障时,JMX可以提供详细的错误信息和堆栈跟踪,帮助我们快速定位和解决问题。此外,JMX还可以实时监控应用程序的运行状况,及时发现潜在的问题。
  3. 动态调整应用程序配置 通过JMX,我们可以在不重启应用程序的情况下,动态调整应用程序的配置参数,例如调整线程池的大小、修改缓存策略等。这对于提高应用程序的灵活性和可维护性非常有价值。

基本概念

Java Management Extensions (JMX) 是 Java 平台的一部分,它提供了用于管理和监控应用程序、设备、系统对象、服务等的 API。JMX 的核心概念包括 MBean(管理bean)、MBeanServer(管理bean服务器)和 JMX Agent(JMX代理)。

MBean 是代表管理资源的对象,它可以是 Java 类或接口。MBean 提供了管理操作的接口,例如获取系统信息、设置参数等。MBeanServer 是管理 bean 的容器,它可以存储和查找管理 bean。JMX Agent 是与本地进程通信的代理,它负责将管理操作转化为本地操作。

  • MBean(Managed Bean)

MBean是JMX的核心概念之一,它是一个资源或服务,可以被管理和监控。MBean实现了javax.management.DynamicMBean接口或者 继承了javax.management.NotificationBroadcasterSupport类。每个MBean都有一个唯一的ObjectName,用于在JMX客户端中标识和访问它。

  • JMX代理(JMX Agent)

JMX代理是一个独立的Java程序,负责加载和管理MBean。JMX代理通常与应用程序部署在一起,以便在应用程序运行时收集和处理MBean的信息。常见的JMX代理有:Java Mission Control、VisualVM等。

  • JMX客户端(JMX Client)

JMX客户端是一个用于访问和管理MBean的工具。它可以与JMX代理通信,获取MBean的信息,以及对MBean进行操作。常见的JMX客户端有:Java Mission Control、VisualVM、jconsole等。

简介

  • JMX 的核心组件是 MBean,它是一个接口,它提供了一种标准的方法来管理 Java 对象。MBean 可以被用于管理任何类型的资源, 包括应用程序、设备、系统对象和业务等。MBean 由两个主要部分组成:MBean 接口和 MBean 类。MBean 接口定义了 MBean 的属性和方法, MBean 类实现了 MBean 接口并提供了管理资源的具体实现。
  • JMX 的另一个重要组件是 JMX Agent,它是一个容器,用于托管 MBean。JMX Agent 可以被用于管理任何类型的资源, 包括应用程序、设备、系统对象和业务等。JMX Agent 由两个主要部分组成:Agent 和 MBeanServer。Agent 是一个 Java 应用程序, 它提供了 JMX Agent 的运行环境和生命周期管理。MBeanServer 是 Agent 的核心组件,它提供了管理 MBean 的 API 和服务。
  • JMX 的第三个重要组件是 JMX Connector,它是一个 API,用于访问 JMX Agent。JMX Connector 可以被用于管理任何类型的资源, 包括应用程序、设备、系统对象和业务等。JMX Connector 由两个主要部分组成:Connector 和 MBeanClient。Connector 是一个 Java 应用程序, 它提供了 JMX Connector 的运行环境和生命周期管理。MBeanClient 是 Connector 的核心组件,它提供了访问 MBean 的 API 和服务。
  • JMX 的应用场景非常广泛,例如:监控和管理 Web 服务器或应用服务器的性能和状态;监控和管理数据库服务器的性能和状态;监控和管理消息传递系统的性能和状态;监控和管理分布式对象的性能和状态;监控和管理业务服务的性能和状态等。

使用示例

创建MBean

定义一个MBean接口。包好MBean的属性和方法:

public interface MemoryInfoMBean {
    Map getInfo();

    void setType(String type);
}

实现接口,MBean命名为 XxxMbean,则其实现类名为 Xxx:

public class MemoryInfo implements MemoryInfoMBean{

    private String type = "memory";

    /**
     * 读取信息
     * @return
     */
    @Override
    public Map getInfo() {
        Runtime runtime = Runtime.getRuntime();
        info = new HashMap();
        info.put("totalMemory", runtime.totalMemory());
        info.put("maxMemory", runtime.maxMemory());
        info.put("freeMemory", runtime.freeMemory());
        info.put("type", type);
        return info;
    }

    /**
     * 更新信息
     * @param val
     */
    @Override
    public void setType(String type) {
        this.type = type;
    }
}

注册到MBean服务器:

public class MAIn {

    public class Registrar {

        MBeanServer mBeanServer;

        public Registrar(){
            mBeanServer = ManagementFactory.getPlatformMBeanServer();
        }
        
        public void register(String name, Object mBean) throws Exception {
            ObjectName objectName = new ObjectName(name);
            mBeanServer.registerMBean(mBean, objectName);
        }

    }
    
    public static void main(String[] args) throws Exception {
        Registrar registrar = new Registrar();
        registrar.register("runtime:info=memory", new MemoryInfo());

        while (true){  }
    }
}

使用JMX客户端访问MBean

启动JMX客户端(如jconsole),选择要连接的应用程序进程,然后在“MBeans”选项卡中查看已注册的MBeans。双击某个MBean,可以查看其属性和方法,以及执行操作。

一文带你彻底了解JMX图片

 

一文带你彻底了解JMX图片

 

使用JMX客户端监控应用程序性能

在JMX客户端中,我们可以查看各种性能指标,例如CPU使用率、内存使用情况、线程状态等。这些信息对于优化应用程序性能和排查问题非常有帮助。例如,在VisualVM中,我们可以查看“Monitor”选项卡中的“Sampler”图表,了解应用程序的CPU使用情况:

使用JMX客户端诊断应用程序问题

当应用程序出现故障时,JMX客户端可以提供详细的错误信息和堆栈跟踪,帮助我们快速定位和解决问题。此外,JMX客户端还可以实时监控应用程序的运行状况,及时发现潜在的问题。例如,在VisualVM中,我们可以查看“Console”选项卡中的日志信息,以及“Threads”选项卡中的线程状态:

使用JMX客户端动态调整应用程序配置

通过JMX客户端,我们可以在不重启应用程序的情况下,动态调整应用程序的配置参数,例如调整线程池的大小、修改缓存策略等。这对于提高应用程序的灵活性和可维护性非常有价值。例如,在VisualVM中,我们可以连接到正在运行的应用程序进程,然后在“MBeans”选项卡中找到相应的MBean,对其属性进行修改:

JMX是一个非常强大的Java管理框架,可以帮助我们监控和管理应用程序的性能、诊断问题以及动态调整配置。通过熟练掌握JMX的使用,我们可以更好地开发和维护高质量的Java应用程序。

扩展

在使用MBean时,当属性值为基础类型,或者常用的引用类型(比如String、Map等)是可以正常显示,但是针对自定义类型,将会显示“不可用”。

这时MXBean则可以解决这一问题,在定义MBean时,将后缀改成MXBean:

public interface MemoryInfoMXBean {
    Info getInfo();
}

一文带你彻底了解JMX图片

 

一文带你彻底了解JMX图片

结束语

Java Management Extensions (JMX) 提供了一种灵活且强大的方式来管理和监控 Java 应用程序。通过 JMX,我们可以方便地获取应用程序的 性能数据、监控系统资源的使用情况,并在必要时对应用程序进行优化或调整。



Tags:JMX   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
一文带你彻底了解JMX
Java管理扩展(JMX)Java Management Extensions (JMX) 是 Java 技术的一个方面, 它提供了一种标准的方法来管理和监控应用程序、设备、系统对象和在分布式系统中的业务。JMX 可...【详细内容】
2023-10-27  Search: JMX  点击:(213)  评论:(0)  加入收藏
JVM监控利器:JMX和JFR的优劣对比
JMX(Java Management Extensions)和JFR(Java Flight Recorder)都是用于监控和管理Java应用程序的工具,但它们有不同的优劣势,取决于具体的监控需求。JMX是一种标准化的Java监控和...【详细内容】
2023-05-17  Search: JMX  点击:(350)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条