一、概述
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)和复合的数据类型。
相关推荐
- **示例演示**:通过具体的代码示例来展示如何使用JMX进行资源管理,帮助读者更好地理解理论知识。 ##### 2. “Hello World”,JMX的方式 - **JMX Hello World程序**:通过一个简单的“Hello World”程序来介绍...
这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...
学习过程中,不仅要注重理论知识的积累,更要加强实践操作,通过项目实战不断巩固和提升自己的技能。此外,保持持续学习的态度,关注Java技术的最新动态和发展趋势,也是成为Java高手不可或缺的一环。 总之,“java...
总结,学习Tomcat6源代码不仅是提升技术深度的过程,也是对Java Web原理的深入探索。通过阅读源代码、运行和调试,我们可以更好地理解这个强大的服务器工作原理,为日常开发和问题解决提供坚实的理论基础。
理解JVM的内存结构,如堆、栈、方法区、元空间等,以及如何通过JMX、JConsole、VisualVM等工具进行性能监控和调优,对于Java开发者尤其重要。 【异常处理】 理解Java异常的分类,如何正确使用try-catch-finally...
### Tomcat深入剖析知识点 #### 一、Tomcat概述与体系结构 - **Tomcat简介**: ...通过以上知识点的总结,读者不仅可以获得Tomcat的基本理解,还能够掌握其实现原理和技术细节,从而更好地应用于实际开发工作中。
3. **实践项目**:理论知识需要通过实践来巩固。建议通过参与实际项目或者创建个人项目来加深理解。 ### 总结 Spring Boot是一款强大的框架,它极大地简化了基于Spring的应用程序开发。无论是对于新手还是有经验的...
5. **性能监控与调优**:学习使用WebLogic内置的监控工具,如WLST(WebLogic Scripting Tool)和JMX(Java Management Extensions),进行性能监控和问题排查。了解内存、线程、JVM参数调优技巧。 6. **部署与生命...
8. **结束语**:可能包含对整个学习过程的总结,以及对未来学习和实践的建议。 总的来说,《Kafka核心技术与实战》全面覆盖了从Kafka基础到高级应用的各个层面,适合希望深入理解和使用Kafka的读者。通过系统学习,...
总结整个课程的主要知识点,回顾学习过程,强调持续优化的重要性,并给出未来学习和实践的建议。 本教程通过理论与实践相结合的方式,帮助Java开发者掌握性能调优的全面技能,无论是在开发阶段还是在维护阶段,都...
例如,基于机器学习的检测方法,通过对正常流量模式的学习,能够有效区分正常请求和攻击流量。这种系统结构对于网络安全防护具有重要意义。 **四、理论研究与应用技术开发** 本文的研究内容为大数据环境下数据流...
JVM(Java Virtual ...总的来说,"JVM01-课程介绍1"是一门全面而深入的JVM教程,旨在帮助学习者建立扎实的JVM理论基础,掌握性能分析和问题排查技巧,以及积累实战经验,从而提升在Java开发和运维领域的专业能力。
- **JMX-JY-002电磁波综合实验仪**是一种集验证与设计于一体的实验装置,用于帮助学生理解和掌握电磁场与电磁波的相关知识。 #### 六、实验仪特点 1. **理论与实践结合**:实验仪紧密结合理论教学,使学生能够在...
理解分布式系统的概念,如一致性模型(例如CAP理论)、分布式协调(如Paxos和Raft协议)、负载均衡和容错机制,都是开发者必备的知识。 其次,是并发编程。在多核处理器和高并发场景下,利用并发可以显著提升系统...
本篇文章将从基础出发,逐步解析它们的工作机制,帮助读者从理论到实践全面理解Tomcat的运行机制。 首先,我们要理解的是Engine。在Tomcat容器结构中,Engine是最顶级的组件,它负责处理所有连接到该服务器的请求。...
第1章 课程简介 课程简介及期望学习本门课程... 14-1 SDK模块HosClient类开发 14-2 SDK模块HosClient功能开发 14-3 SDK模块测试 第15章 课程总结 对整个课程的所用到的理论,技术做一个简单的回顾总结,提出优化的空间
7. **JVM监控与诊断工具**:学习使用JVisualVM、JConsole、JMX、jmap、jhat等工具来监控JVM状态,诊断内存泄漏和性能瓶颈。 8. **代码优化**:编写高效的代码,避免无谓的计算,合理使用数据结构和算法,减少不必要...
10. **并发编程最佳实践**:最后,书中总结了一些并发编程的最佳实践,包括避免全局状态、减少共享数据、使用不可变对象等,旨在帮助开发者编写出更健壮、高效的多线程代码。 通过学习《驯服Java线程》,开发者能够...
通过阅读《阿里巴巴Java性能调优实战(2021华山版)》,读者不仅可以掌握Java性能调优的理论知识,还能学习到阿里巴巴在实际业务中总结的宝贵经验,这对于提升个人或团队的开发效率,保障系统稳定性和性能具有极大的...