你听说过JMX吗?

Java技术迷

共 3900字,需浏览 8分钟

 ·

2021-07-13 07:28

立体的萌 | 作者

Java技术迷 | 出品

前言

JMX的全称叫做Java Management Extension,中文名叫做java管理扩展,他是一个给应用程序、设备等做植入管理功能的框架,JMX主要是解决分布式系统管理的问题的;

他的主要的优点有:可以非常容易得管理应用程序,得益于高度伸缩性的架构服务可以很容易的部署或者是取消。更重要的是提供了很多接口(java中我最喜欢的类就是接口了)可扩展性强 ;

JMX大体长这样

JMX每个层都是干嘛的?

1.设备层

管理构件

设备层主要的作用是定义了信息模型、通知机制、一些辅助元数据类以及如何实现JMX管理资源的规范,在JMX中,管理对象都是以管理构件(MBean)的形式存在的,JMX的管理资源可以是一个java应用或者是以个服务也可以是一个设备,只要是用java开发的或者是用java进行包装并且能置入JMX框架中的都叫JMX管理资源,并成为JMX的一个个管理构件(MBean),管理的时候需要先向MBean服务器注册;

管理构件其实就是管理java资源并遵从一定的设计模式的接口,一个管理构件的管理接口:能被接触的属性值、能够执行的操作、发出的通知事件和管理构件的构建器;

JMX框架定义了四种管理构件:

第一种:标准管理构件

这是最简单的一种,这种构件的实现是通过一组定义了属性和操作的命名规则(也就是设计模式)来完成的,检查标准管理构件的接口和应用设计模式的过程叫做内省;

JMX代理就是通过内省来查看每一个注册在MBean服务器上的管理构件的函数和父类(查看他们是否遵从一定的设计模式)来决定他们能否代表一个管理部件,如果可以的话,就辨认出他们的属性和操作;

第二种:动态管理构件

这种构件有着更好的灵活性,他的管理接口是可以在运行时开放的,他通过来实现DynamicMBean接口来干活;JMX代理通过getMBeaniInfo()函数来获取当前的动态管理构件的管理接口,getMBeaniInfo()函数返回的对象是包含了属性和操作的签名的MBeanInfol类的实例;

之所以动态管理构件可以在运行期获取,就是因为getMBeaniInfo()函数的调用是发生在动态管理构件向MBean服务器注册之后,与标准管理构建不同的是:JMX代理不需要通过内省这种方式来确定动态管理构件的管理接口;

第三种:开放管理构件

严格来说,这也是动态管理构件,这是一种专门化的动态管理构件,就如同 接口也是抽象类,而且是一种更加抽象的抽象类,所有的有关开放管理构件相关的参数、返回值类型和属性都围绕着一组预定义的数据类型来建立;

预定义的数据类型就是我们常见的那些数据类型,比如:String、Integer、Float等,同时通过一组特定的接口来进行自我描述,JMX代理通过获得一个OpenMBeanInfo对象(OpenMBeanInfo是MBeanInfo的子类)来获取开放管理构件的管理接口;

第四种:模型管理构件

与开放管理构件一样,他也是一种动态管理构件,而且也是一种专门化的动态管理构件,它是一种预制的、通用的并且还是动态的MBean类,他包含了所有必要的默认行为的实现,还能允许在运行时添加或者是覆盖需要定制的实现;

JMX规定模型管理构件必须通过实例化javax.management.modelmbean.RequiredModelMBean类来实现,还要配置该构件的默认行为并注册到JMX代理中,JMX代理通过获取一个ModelMBeanInfo对象来获取管理接口;

模型管理构件在我看来是最先进的一种管理构件,他的主要的优点有:

  1. 持久性,它是有持久机制的,用的就是java序列化技术甚至是JDBC来存储模型MBean的状态;

  2. 通知和日志功能,模型管理构件可以记录每个发出的通知,还自动发出属性变化通知;

  3. 属性值缓存;

    通知模型

    JMX还定义了通知模型,接口只是提供了一部分功能,管理应用程序还需要对状态变化或者是特殊情况的发生做出反应和处理,JMX通知模型的主要工作就是完成同一个JMX代理中的管理构件之间的事件传播;

    JMX的通知模型主要有以下几部分:1.Nitification接口。

    一个通用的事件模型,用来标识事件的类型,可以被直接使用,也可以根据传递的事件的需要而被扩展;

    主要用于接收通知的对象;

    主要作用于需要通知过滤器的对象,为监听者提供过滤通知的过滤器;

    这是由通知发送者实现的接口,允许希望得到通知的监听者注册;

    辅助元数据类

    JMX框架还定义了辅助元数据类,它是用来描述管理构件的,他不仅可以用来内省标准管理构件,还能被动态管理构件用来进行自我描述,辅助元数据类通过属性、操作、构建器和通告来描述管理构件,JMX代理就是通过辅助元数据类来管理所有的管理部件,不过管理部件具体是什么类型JMX代理就不管了;

    辅助元数据类主要有以下几种:

    2.代理层

    代理层是运行在java虚拟机上的管理实体,是管理资源和管理者之间的桥梁,代理层是直接管理资源的,他管理的资源库可以被远程的管理程序所控制,代理层的主要构成是一个MBean服务器和一系列处理被管理资源的服务;

    MBean服务器

    MBean服务器是代理层是核心,这里注册着设备层的所有的管理构件,注册个管理部件的时候必须提供唯一的一个对象名,管理应用程序就是用这个对象名来进行标识管理部件并对其操作,具体的操作有: 1.发现管理构件的管理接口;

    2.读写属性值;

    3.执行管理构件中定义的操作;

    4.获取管理构件中发出的通告

    5.基于对象名和属性名来查询管理构件;

    协议适配器和连接件

    MBean服务器就是依赖他俩来运行与该代理的java虚拟机之外的管理应用程序来进行通信,协议适配器通过特定的协议提供了一张注册在MBean服务器的管理构件的视图;

    连接器提供管理应用一方的接口以使得代理和管理应用程序进行通信,也就是说中针对不同的通信连接器提供的是一样的远程接口来封装通信过程,当远程应用程序使用这个接口的时候就可以通过网络透明的和代理进行交互,与协议就没什么关系了;

    适配器和连接器主要有这些:

    1.RMI连接器

    2.SNMP协议适配器

    3.IIOP协议适配器

    4.HTML协议适配器

    5.HTTP连接器

    代理服务

    代理服务可以对注册的管理构件执行管理功能(智能管理),代理服务本身也是作为管理构件而存在,也可以被MBean服务器控制;

    JMX定义的代理服务主要有以下几种:

    通过管理小程序服务可以获得并实例化新的类,还可以使网络上的类库本地化,他是通过management-applet服务来实现的;

    用来定期监视管理构件的属性值,一旦超出范围就会发出特定的通告,JMX规定了三种监视器:计数器、度量和字符串;每一个监视服务都是作为一个标准管理构件存在的,需要提供服务的时候就可以由相应的管理构件或者是远程管理应用程序动态创建或配置注册使用;

    可以周期性的发出通告或者是在制定日期和时间的时候发出通告,他也是一个管理构件,主要作用就是帮助管理应用程序建立一个可配置的备忘录;

    JMX规范 中也定义了管理构件之间的关系模型,一个关系是用户定义的管理构件之间的N维关系,关系模型中包括:角色、角色信息,管理类型,关系,角色值,关系服务等;

    注意,只有注册哦MBean服务器上并且能被对象名标识的管理构件才能成为一个关系的成员,关系服务还能锁定不合理关系类型的创建;

    3.分布服务层

    分布管理层规定了实现JMX 应用管理平台的接口,它定义了对能对代理层进行操作的管理接口和组件;

    他的主要功能如下:

    有良好的安全性,通过管理应用层和另一个管理代理的设备层的联合就可以提供一个完整的网络管理的解决方案;

    总结

    这就是JMX,他就像是javaweb世界里的一名无名小卒,默默付出,他的知名度没有那么高,但是并不代表它的用途不广泛,SUN公司在此基础上开发了用于网络管理的JDMK,还有BEA的weblogic应用服务器把JMX作为自己的管理基础,JBoss实现的J2EE应用服务器也是以JMX为内核的;



    1. 为管理应用程序提供一个接口,这个接口就好比是个连接器能够透明的与代理层或者是JMX管理资源进行交互;

    2. 通过各种协议的映射提供了一个JMX代理和所有可管理组件的视图;

    3. 分布管理信息,把高层的管理平台的管理信息向下面众多的JMX代理发布;

    4. 收集多个JMX代理端的管理信息,并根据管理终端用户的需要筛选其感兴趣的内容并整理成逻辑视图的形式发给终端用户;

    5. 关系服务
    6. 时间服务
    7. 监视服务
    8. 动态类装载。
    9. NotificationBroadcaster接口。
    10. NotificationFilter接口。
    11. NotificationListener接口。
本文作者:立体的萌  为Java技术迷专栏作者 投稿,未经允许请勿转载。

1、真香!用IDEA神器看源码,效率真高!
2、什么?Spring Boot CommandLineRunner 有坑!?
3、顶级分布式开源项目,配上这款可视化工具,真香!
4、都知道Tomcat是个Servlet容器,可是Servlet又是怎么回事?
5、这年头,还有不会OOM排查神器mat的程序员么?
6、Java程序员必会的工具库,让你的代码量减少90%
7、重装IDEA再也不愁了,一招搞定同步个人配置了!

点分享

点收藏

点点赞

点在看

浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报