JMX学习总结(理论)

一、概述

JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX是一套标准的代理和服务,用户可以在任何Java应用程序中使用这些代理和服务实现管理。

 

JMX体系结构分为以下几个层次:1)设备层   2)代理层    3)服务层

 

JMX的好处:

    1、以标准的方式管理Java应用、系统和网络。

    2、提高编写管理程序的效率,将模块变成JMX的MBean。

    3、松耦合的组件开发实现了系统的可插拔性,降低了移植和维护成本。

    4、可实现远程对系统的监控和管理,其中包括了系统底层的JVM。

    5、对原有应用改动小,可方便地集成管理系统。

       6、致力于解决分布式系统管理的问题。

 

JMX的特点:

    1、JMX具有一套标准的架构,使得在管理方面具备动态性、灵活性、可扩展性和稳定性。

       2、JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

 

典型用途包括:

    1、应用程序配置信息维护。

    2、通知状态更改及错误状况(通知机制)。

    3、作为解决方案的一部分来管理系统、网络等。

    4、API包括远程访问,远程管理程序可以与正在运行的应用程序进行交互。

    5、JMX核心类为MBean,表示资源的指定管理对象。它有一个管理接口,内容包括读写属性、调用操作、发送通知。

二、分层

服务层:

1、定义了能对代理层进行操作的管理接口和组件,包括适配器和连接器的描述。

2、分布式服务层驻留着管理应用。管理应用通过连接器与MBean服务器建立连接,并通过管理接口去访问各个Mbean所包装的可管理资源。

 

连接器:

    连接器位于JMX三层构架中的分布式服务层。连接器负责建立MBean服务器和管理应用之间的通信。连接器由一个驻留在代理层的连接器服务器(connector server)和管理应用的连接器客户端(connector client)构成。连接器服务端(connector server)连接到MBean服务器并监听来自客户端(connector client)的请求。

 

    在Java SE中,RMI连接器被指定为默认的连接器。

 

协议适配器:

 

    分布式服务层中另一个用来帮助建立管理应用和MBean服务器连接的组件是协议适配器(Protocol Adaptor)。协议适配器支持建立在某个协议之上的对MBean的访问。比如通过HTML适配器可以在Web浏览器中显示一个MBean。Java SE默认并未包含任何适配器。

 

RMI连接器

   JMX API定义了一个标准连接器-RMI连接器,它支持通过RMI远程访问一个MBeanServer。

 

   RMI连接器服务器的地址示例如下:

       service:jmx:rmi://localhost:1099/jndi/rmi://localhost:8899/myname

 

   说明:

      service:jmx: 是JMX URL的标准前缀,所有的JMX URL都必须以该字符串开头。

      第一个rmi指的是rmi连接器,表示连接器使用RMI传输协议,第二个rmi指定RMI注册RMI连接服务器存储存根stub。

      localhost:1099: 是connector server的IP和端口,该部分是一个可选项,可以被省略掉。如果省略的话,则connector server会随机任意选择一个可用的端口。

 

      /jndi/rmi://localhost:8899/myname: 是connector server的路径,表示Connector server的stub是使用JNDI API绑定在rmi://localhost:8899/myname这个地址上。

 

 

代理层:

1、定义了各种服务以及通信模型,由一个MBean服务器和一系列处理被管理资源的服务所组成。

2、维护MBean的生命周期,为所注册的MBean提供各类服务。

 

3、通过连接器将已注册的MBean的管理接口暴露给外面的管理应用使用。

 

   MBean服务器:

    MBean服务器位于JMX三层架构中的代理层,它是代理层的核心,负责完成代理层的主要功能。MBean服务器管理着MBean的生命周期,即注册和注销,并向MBean提供各类服务,包括动态加载 (Advanced Dynamic Loading)服务、监视(Monitor)服务、定时器(Timer)服务和关联(Relation)服务。

    MBean服务器通过连接器将已注册的MBean的管理接口暴露给外面的管理应用使用。

 

    MBean服务器和它所代理的MBean所驻留的Java虚拟机被称作代理端(Agent Side),而管理应用所驻留的Java虚拟机被称作管理端(Manage Side)。管理端对代理端的访问多为远程访问,而MBean服务器对其代理的MBean的访问都是本地访问。

 

   ObjectName:

    ObjectName是MBean的唯一标识,它在MBean向MBean服务器中注册时指定。管理应用可以通过这个标识来寻址MBean。ObjectName体现了MBean服务器关于MBean的命名机制,这一机制是管理应用和MBean之间实现松耦合的关键。

    一个ObjectName包含两部分:域名称和没有经过排序的一个或者多个关键属性集。

    语法:[domainName]:property=value[,property=value]

    范例:com.travelsky.pss.dep:type=DepService,version=1.0

 

    域名(Domain Name):其命名和Java包的约定一致,即“反向的DNS名 + 组织自定义的字串”。

 

    关键属性(Key Properties):是一些key-value对,通过它们可以为MBean在指定的域中添加包括名字、类型和说明等属性,但这些属性可以不是MBean的实际属性。

 

   代理服务(Agent Service):

    MBean服务器提供给注册MBean的服务被称作JMX代理服务,它们本身也被封装成MBean的形式。代理服务位于JMX架构中的代理层。代理服务主要包括四类:动态加载(Advanced Dynamic Loading)服务、监视(Monitor)服务、定时器(Timer)服务和关联(Relation)服务。

 

    1、动态加载服务——通过获取包含MBean相关信息的XML文件MLet(Management Applet),实例化并注册MBean。

 

    2、监视服务——监视MBean的属性变化,当属性值的变化超出预定义的范围时,相应地发出通知。根据所监视的属性,JMX定义了三类监视器。

        计数器监视器(Counter Monitor):监视整型(Integer)类型的属性值,当数值变更幅度超出预设时触发事件。

        度量监视器(Gauge Monitor):监视整型(Integer)或浮点类型(Floating)的属性值,当数值超出预设的上限或下限时触发事件。

        字符串监视器(String Monitor):监视字符串(String)类型的属性值,当字符串变更时触发事件。

   

    3、定时器服务——在指定时间触发事件或周期性地重复触发事件。

 

    4、关联服务——定义MBean之间的关联并且维护关联的一致性。

 

   管理接口:

    MBean被MBean服务器注册并启用后,MBean服务器将解析MBean所获得的管理接口并将其暴露给外部的管理应用。

    管理应用必须通过MBean服务器提供的管理接口来访问MBean,而不能直接访问MBean。

 

    MBean服务器提供的管理接口具体包含以下几部分:       

         实例化并注册MBean。这些MBean可以是来自驻留在代理端的类(Class),也可以是从网络或本地装载来的新类。

        管理注册的MBean,包括属性读写和方法调用。

 

        接受MBean发出的通知。

 

   消息模型:

    Notification(消息)被用来特指JMX 应用中的事件。JMX消息模型所描述的是MBean之间交换信息的机制。JMX消息模型包括消息播发器、JMX消息、侦听器(Listener)和过滤器等对象。JMX消息经过过滤器的筛选,由消息播发器发送给消息侦听器。

 

    侦听器需支持NotificationListener接口,这个接口定义了事件被触发时侦听器所要完成的操作。消息播发器则要求维护一个所要通知的消息侦听器的列表,它通常实现了接口 NotificationBroadcaster或NotificationEmitter。过滤器须实现NotificationFilter 接口,并通过实现接口中的方法isNotificationEnabled(Notification notification)来决定过滤哪些消息。

  

 

    要生成消息,MBean必须实现NotificationEmitter接口或继承NotificationBroadcasterSupport类。要发送一个通知必须构造Notification类的实例或者子类(如NotificationChangedAttribute),通知实例产生后,由NotificationBroadcasterSupport的sendNotification方法发送通知。

 

 

设备层:

1、包括了一系列的接口定义和描述如何开发MBean的规范,定义了通知机制以及实现管理构件的辅助元数据类。

2、对资源进行封装,使之成为可管理资源。一个可管理资源以管理构件(Managed Bean,简称MBean)的形式存在,需要注册到MBean服务器上才能被管理。

 

3、JMX定义了四种管理构件:标准、动态、开放和模型管理构件。

 

    管理构件:

    在JMX规范中,管理构件定义如下:它是一个能代表管理资源的Java对象,遵从一定的设计模式,还需实现该规范定义的特定的接口。该规范保证所有的管理构件以一种标准的方式来表示被管理资源。

 

    程序、日志、持久化数据、硬件、内存、网络吞吐量等都可看作是系统资源。管理资源暴露出一些信息,让外部能够进行远程查看和远程监管,这就是管理构件要做的事情。

 

    MBean组件:

    MBean是Management Bean的缩写,负责将可管理资源和服务封装成类似Java Bean的形式。通过MBean的特性可以访问可管理资源的各类信息。MBean对资源的封装体现在以下几个方面: 1)属性名称及读写类型。  2)对资源的操作。  3)指定类型的通知。

 

    MBean在JMX三层架构中位于设备层和代理层:位于设备层的MBean被用来封装可管理资源,而位于代理层的MBean被用来封装MBean服务器提供的代理服务。

 

    MBean的类型:

    1、标准(Standard)MBean

        标准MBean适用于描述那些数据稳定且可被事先准确定义的资源。标准MBean就是一个普通Java Bean,MBean服务器通过Java的内省(Introspection)机制来获知标准MBean的属性、事件和方法,只是这里内省所遵循的命名规定是JMX特有的命名约定。

    2、动态(Dynamic)MBean

        动态MBean适用于描述那些要在运行时才可确切知道的数据结构的资源。与标准 MBean不同的是,动态MBean所暴露的管理接口不必事先确定,而是可根据运行时的情况,判断生成最终的管理接口。

        动态MBean的标志是实现了javax.manangement.DynamicBean接口。接口中的方法getMBeanInfo()所返回的就是要对外发布的管理接口。与标准MBean不一样的是,MBean服务器不是通过内省,而是通过getMBeanInfo()方法的返回值来获取动态Bean的管理接口。

    Model MBean和Open MBean都是动态MBean的延伸。

        (1) Model MBean预先实现了某些行为,并允许在运行过程中间进一步定制这些行为。Model MBean的标志是实现Model MBean接口,并在ModelBeanInfo对象中提供元数据的资源配置。Model MBean提供了将资源适配到MBean接口的能力。

 

        (2) Open MBean是一类特殊的动态Mbean,它的特征是只针对特定对象,比如原始的数据类型(如int和float)和复合的数据类型。

 

 

猜你喜欢

转载自chenjumin.iteye.com/blog/2247628
JMX
今日推荐