JMX系列——概述

     JMX(Java Management Extensions) API是JCP开发的一个标准,提供了管理和监控应用程序和服务的功能。它定义了一整套的管理构架、设计模式、API及服务供我们建立基于web的、分布式、动态和模块化的解决方案来管理基于Java的资源。

1.概述
      JMX技术是Java编程语言特有的。因此,它对基于java的功能提供了自然、高效和轻量级的管理扩展。它包含一系列的规范和开发工具供我们管理Java环境及开发应用和服务的管理方案。JMX技术框架的动态性使得你可以使用它来监控和管理资源,它也可以被使用来监控和管理JVM。

JMX典型的使用场景有:
(1)查询和改变应用配置;
(2)收集应用行为的统计信息,使统计信息可视化;
(3)状态变化和错误环境的预警;

2. 使用JMX的好处
     JMX技术使得Java开发者能将资源封装成Java对象并在分布式环境中把他们暴露为管理资源。JMX规范中列出了下面这些使用它来构建管理基础平台的好处:
(1)管理Java应用和服务而不需要重大的投入。JMX框架依赖于一个核心管理对象服务器,它作为一个管理agent运行在大多数的Java设备上。可以在不影响他们的设计的情况下管理Java应用;
(2)提供了一个可伸缩的管理框架:一个JMX agent服务是独立的,并且可以被插入到管理agent中。基于组件的方式使得JMX解决方案无论是小面积的设备还是大型通信开关都能适用;
(3)可以补充将来管理概念:JMX可以实现灵活和动态管理解决方案。它可以补充新兴的技术,比如JMX解决方案可以使用命名发现服务JINI或者是网络技术如UPnP,SLP;
  ……


3. JMX层次体系结构

     JMX技术提供了一个层次体系结构,被管理的资源和应用可以被以可插拔的方式整合到框架中,给定的资源被当成一个或多个Java对象,即我们熟知的Managed Beans(或者MBeans),MBeans被注册到MBean Server(核心管理对象Server)中。MBean Server作为管理agent运行在支持java的设备上。


如上图所示,JMX构架是一个三层架构,Instrumentation、Agent及Manager。
(1)Instrumentation层
这层包含了MBeans及被它们管理的资源。它提供了一个规范来实现JMX技术可控的资源,这些资源可以是应用、服务、设备、或者是用户等。如果资源是基于Java开发的并且已经被装备(intrument)以便能被JMX应用所管理,我们就说这个资源是可控的。资源可被一个或多个不同的MBean装备(instrument),MBean可以是标准或动态的。标准MBean是某些满足一定的设计模式(如有构造函数和get/set方法)的java对象。动态MBean实现了某些接口能够提供更多的灵活性。资源的instrumentation使得它能被agent层管理。JMX管理的资源可以使用任何提供它需要的服务的JMX agent。

Intrumentation层的关键组件是MBeans、Notification Model以及MBean metadata classes;

(1)MBeans
          MBean是一个实现了特定接口的Java对象。MBean的管理接口类型有:(a)可存取的值属性;(b)可被调用的操作;(c)可发出的通知(notifications);(4)构造函数;
          总共有四种类型MBeans:
          Standard MBeans(标准MBeans): 这是最容易设计和实现的,它们的管理接口通过方法名字来描述;
             Dynamic MBeans(动态MBeans): 它们实现了一个特定的接口,并且在运行时暴露管理接口给外部以获得最大的灵活性;
             Open MBeans与Model MBeans: 这两个也都属于动态MBeans,不过它们提供了一些自己的特性,如Model MBeans是在运行时完成可配置和自描述的。

(2)Notification Model(通知模型)
          JMX技术基于Java的事件(event)模型定义了一个通用的notification模型。它让开发者可以建立一个proactive(积极主动)的解决方案。使用通知模型,JMX agents 和MBeans 可以给对当前事件感兴趣的管理应用程序或者是其它的MBeans发送一些重要的消息。

(3)MBean Metadata Classes
          这些类包含了描述一个MBean管理接口的所有组件所需的结构:它的属性、操作、通知、构造。对于这些结构,metadata包含有名字、描述以及它的特殊性质(如,属性是否可读,可写或者都可以;操作的参数类型与返回类型)



Agent层
      这一层包含了负责暴露MBeans给外部的JMX agent。它提供了实现agents的规范,agent的职责是控制资源并保证它们对远程的管理应用的可用的。Agents通常和它们管理的资源位于同一个机器上,但这并不是必须的。JMX agent包括一个MBeans服务器和一系列处理MBeans的服务。管理者存取agent的Mbeans对象并通过protocol adaptor或者connector使用它们提供的服务。但是JMX agents不需要知道使用它们的远程管理应用。

agent层的主要组件是MBean Server和Agent Services:

(1)MBean Server
     它是需要暴露给agent管理操作的对象的注册点。任何对象只要注册到MBean Server中,其对管理应用程序便是可视的。需要注意的是,MBean Server暴露的只是MBean的管理接口而并非是它的直接对象引用。任何在agent的JVM以外的资源,如果你想对其进行管理,那么你必须将它注册为MBean Server中的一个MBean。MBean Server也提供了一个标准的接口给我们存取位于同一个JVM下的MBeans,使得本地对象具有操作可管理资源的所有优点。MBeans可以被其它Mbean、agent自身或者是一个远程的管理应用通过分布式服务实例化和注册。当你注册一个MBean时,你必须要给它一个唯一的对象名,管理应用程序(management application)将使用它来识别这个MBean,以执行其定义的管理操作。

(2)Agent Services
     Agent Services是指可以在注册于MBean Server中的MBean上执行管理操作的对象。通过在agent中引入management intelligence,JMX能帮你构建更加强大的管理方案。 JMX API定了如下Agent Servcies,它们包含在J2SE 5.0中。
     a. Dynamic Class Loader:通过管理applet服务,可以在网络中的任何位置获取和实例化新的类和原生库;
     b. Monitor:观察一系列MBeans的属性值,并在它们发生各种类型变化时通知其他对象;
     c. Times :提供了一个调度机制,包括有定时、重复等类型;
     d. The relation service :定义了MBeans之间的关系并基于预先定义的关系类型执行此关系的集势(cardinality)。


Manager Level(管理层或者说是分布式服务层)
     这一层包含了所有使得与JMX agents进行交互的管理应用程序可用的组件。它提供了供我们实现JMX管理器、定义操作agents的管理接口和组件的一系列接口。









Java Agent是Arthas使用的技术,是Skywalking使用的技术,是一份十分重要的技术。 课程的稀缺性在此之前,市面上并没有针对Java Agent进行系统介绍的课程。 通过搜索引擎查找,会发现与Java Agent相关的内容大多是个人知识总结分享的内容。这些内容有如下特点:内容质量不一详略程度不一学习难度千差万别总体上来说,学习者很难有一个整体认知、系统学习的过程。 课程的设计目标 在构思课程内容时,本课程带有以下目标:课程学习梯度:从简单到复杂,让学习者有一个循序渐进的理解过程。构造完整、统一的知识体系:不是零散的知识点堆砌,而是有一个统一的贯穿始终的知识框架。具有可操作性的代码示例,不只是讲概念,更注意于实践。课程内容安排 本课程通过四章内容对Java Agent相关知识进行讲解:第一章,介绍Agent Jar的三个组成部分:Manifest、Agent Class和ClassFileTransformer。第二章,介绍Agent Jar的两种启动方式:从命令行启动和使用Attach机制启动。第三章,介绍如何利用Instrumentation API来实现Agent Jar的功能。第四章,Java Agent的应用与技巧。 通过本课程的学习,让同学们更好地建立起一个完整的知识体系:  讲师介绍我叫刘森,南京师范大学研究生毕业,2015年获得信息系统项目管理师(高级),2014年获得系统集成项目管理工程师(中级)。 目前,我的课程都是围绕着“Java字节码”技术展开: 《Java Agent基础篇》是在一个运行JVM当中提供修改字节码的机会《Java ASM系列》(免费课程)是一个操作字节码的类库《Java 8 ClassFile》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程” 因此,我对字节码技术有较为深入的研究和理解,大家想学习字节码的技术可以找我:字节码技术找刘森,轻松学习又省心~~~ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值