本文内容为蓝鸥上海Java培训教程Java管理扩展指南之JMX技术总览。
JMX(Java管理扩展)系列
JMX(Java管理扩展)系列旨在介绍包含于Java基础版本(Java SE)中的JMX技术。本系列提供了如何使用JMX重要技术特性的诸多示例。
一、JMX技术总览简要介绍JMX技术,包括它的使用目的和主要功能。
二、MBean简介介绍JMX技术的基本概念-被管理的beans,也称作MBeans。同时会介绍MXBeans。
三、通知介绍JMX技术中的通知机制。
四、远程管理展示如何实现JMX API的远程管理能力和如何创建JMX客户端程序。
五、更进一步展示JMX技术的更为高级的文档,用于更进一步的深入学习。
JMX技术总览
1.1. JMX技术总体概述
JMX(Java管理扩展)技术是Java基础版本(Java SE)的一部分,最早加入到J2SE 5.0发行版。
JMX技术提供了一种简单的、基础的方法,用来管理诸如应用、设备和服务等资源。由于JMX技术是动态的,你可以使用JMX技术来监控和管理处于创建、安装和运行态的资源。你甚至可以使用JMX技术监控和管理Java虚拟机。
JMX规范定义了使用Java语言管理、监控应用和网络的架构、设计模式、APIs和服务。
使用JMX技术,资源会被一到多个称之为被管理Beans(MBean)的Java对象管理。MBean server担任管理代理的角色,可运行与支持Java语言的设备上。
JMX规范定义了JMX代理,它用于管理任何被正确配置的资源。JMX代理由MBean server(MBean在MBean server中注册)和一系列处理MBean的服务构成。这样,JMX代理直接控制资源并使远程管理程序控制资源成为可能。
资源被管理的方式完全独立于管理类的结构。资源被视为可被管理,与管理程序如何实现没有任何关系。
JMX技术定义了基本的连接器(称之为JMX连接器),它让你能够从远程管理程序访问JMX代理。JMX连接器的管理接口可以使用不同的协议。因此,管理程序可以更透明的管理资源,而不用担心使用的通信协议。JMX代理也可以被不满足JMX规范的系统或者应用调用,只要这些系统或者应用支持JMX代理即可。
1.2. 为何使用JMX技术?
JMX技术为开发者提供了一种更灵活的方法来管理基于Java的应用程序,创建更敏捷的代理,实现分布式管理中间件和平滑地集成这些解决方案到已经存在的管理和监控平台。
1.2.1. JMX技术使得Java应用程序易于被管理
基于JMX的代理可以运行于大多可运行Java程序的设备上。因此,java应用程序可以只需要付出很小的设计代价就能被管理起来。Java应用程序只需要嵌入一个被管理的对象server并开放其功能到MBeans,然后将MBeans注册到对象server。这必是应用程序被JMX管理所需要做的全部。
1.2.2. JMX技术提供基本的方式来管理Java应用程序、系统和网络
例如,Java企业版本(Java EE)5应用服务器符合JMX架构,因此可使用JMX技术对其进行管理。
1.2.3. JMX技术可用于管理Java虚拟机
Java虚拟机可以使用JMX技术管理。你可以启动一个JMX代理来访问内置的Java虚拟机,并可以远程监控和管理Java虚拟机。
1.2.4. JMX技术提供了一种可扩展、动态的管理架构
每一个JMX代理服务都是一个独立的模块,都可以根据需要被插入到管理代理中。这种基于组件的方法意味着JMX解决方案规范可以适应于小规模的设备和大规模的交换机。JMX技术规范提供一系列的核心代理服务。并可在管理程序中开发、动态加载、卸载和更新扩展服务。
1.2.5. JMX技术存在于基本的Java技术中
无论是否需要,JMX技术规范存在于Java规范,例如JNDI API。
1.2.6. 基于JMX的应用可以从NetBeans IDE中直接创建
你可以从NeBeans Update Center(选择:工具->更新中心)中获取创建JMX应用的模块。这能降低开发JMX程序的复杂度。
1.2.7. JMX技术集成了已有的管理方案和新兴技术
JMX APIs接口开放,任何管理系统供应商都可以实现。JMX解决方案可以使用查找和发现服务和协议,例如JINI网路技术和SLP。
1.3. JMX技术架构
JMX技术分为三层,包括:
装配层
JMX代理层
远程管理层
1.3.1. 装配层
使用JMX技术管理资源,你应该首先使用Java编程语言装配资源。你需要使用称之为MBeans的Java对象实现对资源设备的访问。MBeans必须遵从JMX规范定义的设计模式和接口。这样做保证了所有的MBeans以一种标准的方式管理资源。除了标准MBean,JMX规范还定义了一系列的MBeans。本系列着重讲解MBeans和MXBeans。
一旦资源被MBeans装配,资源便可以被JMX代理管理。MBeans不需要知道JMX代理去操作哪一个MBean。
MBeans被设计成灵活、简单和易于实现。开发者可以在不需要理解复杂管理系统的基础上,将应用程序、系统和网络以一种标准的方法将他们管理起来。已有资源可以用最小的代价完成管理。
此外,JMX规范的装配层提供通知机制。这种机制保证MBeans可以生成并传递通知事件到其他层。
1.3.2. JMX代理
基于JMX技术的代理(JMX代理)是一种标准的管理代理,它直接控制资源并使得他们能够使用远程管理程序进行管理。JMX代理通常与管理的资源位于同一机器,但这并不是必须的。
JMX代理的核心组件是MBean server,MBeans在其中进行注册。JMX代理同样包括一系列的服务来管理MBeans和至少一种通信适配器或者连接器来保证与远程管理程序的连接性。
当你实现JMX代理时,你不需要知道所管理资源的具体语义和功能。实际上,JMX代理甚至不需要知道它所管理的是何种资源,这是因为任何资源只要满足JMX规范进行装配,都可以使用JMX代理。同样的,JMX代理不需要知道它所访问资源的具体功能。
1.3.3. 远程管理
JMX装配过的设备可以使用多种方法进行访问,例如使用SNMP管理协议,或者更通用的协议。MBean server依赖协议适配器和连接器来保证JMX代理对管理程序的可见性。
每个适配器都通过特定的协议提供一系列的视图来展示注册到MBean server上的MBean。例如,HTML适配器可以在浏览器中展示MBean。
连接器提供管理侧的接口处理在管理程序和JMX代理之间的通信。每个连接器通过不同的协议提供相同的远程管理接口。当一个远程管理程序使用这个接口,它可以通过网络透明的连接到JMX代理,而不论协议是什么。JMX技术基于Java RMI(Java远程方法调用)提供标准的解决方案来暴露JMX转配设备到远程管理应用程序。
1.4. Java虚拟机的监控和管理
JMX技术可以应用于监控和管理Java虚拟机。
Java虚拟机有内置的设备允许你使用JMX技术对其进行监控和管理。这些内置的管理工具经常与“开箱即用”Java虚拟机管理工具联系在一起。为了监控和管理Java虚拟机的不同方面,Java虚拟机为实现JMX规范的管理应用提供了MBean server平台和特殊的MXBeans。
1.4.1. MBean server平台和MXBean平台
MXBean平台是一系列的MXBeans-Java基础版本提供的,用于监控和管理Java虚拟机和Java运行环境(JRE)中的各种组件。每种平台的MXBeans都封装一部分Java虚拟机功能,例如类加载系统,即时编译JIT,垃圾收集器GC等等。这些MXBeans可以使用实现JMX规范的监控和管理工具来展示和交互,以便你能够加农和管理不同的虚拟机功能。JConsole图形化接口就是Java基础版本提供的一种监控和管理工具。
1.4.2. JConsole
Java基础版本提供JConsole监视和管理工具-它遵从JMX规范。JConsole使用MXBeans平台来提供运行于Java平台上应用的性能和应用资源消耗情况。
1.4.3. “开箱即用”的管理
由于Java基础版本内置提供基于JMX技术的标准监控和管理工具,你可以“开箱即用”般的,不用写一行JMX API代码就能使用它。你可以启动一个Java应用,然后使用JConsole监控它。
1.4.4. 使用JCon搜了监控应用
这部分展示如何监控Java记事本程序。低于Java基础版本6的环境下,被JConsole监控的应用启动时需要添加如下启动项:
-Dcom.sun.management.jmxremote
A)启动Java记事本程序,可以在终端窗口中使用如下的命令行:然而,Java基础版本6及其以上版本的环境下,JConsole可以使用Attach API链接任何本地Java应用进程。换句话说,任何使用Java SE 6 HotSpot虚拟机启动的应用程序都会自动被JConsole监控,而不需要实用上述的启动项。
java -jar
jdk_home/demo/jfc/Notepad/Notepad.jar
jdk_home是JDK的安装目录。如果你是在低于Java基础版本6的环境中,你需要使用如下的启动命令:
java -Dcom.sun.management.jmxremote -jar
jdk_home/demo/jfc/Notepad/Notepad.jar
B)一旦启动成功,在另一个终端窗口,使用如下命令启动JConsole:
jconsole
接下来会出现一个新的连接对话框。
C)在链接对话框中,在本地处理列表中,选择Notepad.jar并点击连接按钮。JConsole打开并连接到Notepad.jar进程。当JConsole打开后,你便可以看到与Notepad程序相关的监控和管理视图。例如,你可以查看应用消耗的堆内存,应用当前运行使用的线程数目,应用消耗的CPU数量等。
D)点击不同的JConsole标签。每一个标签会展现Notepad程序在Java虚拟机中不同方面的功能。所有的展现的信息都是由本系列提到的,基于JMX技术的MXBeans提供。所有MXBeans都可以在MBean标签页展示,MBean标签将在下一章讨论。
选择连接->退出,退出JConsole。
想了解如何学习Java,请阅读蓝鸥Java培训给Java程序猿学习当中各个阶段的建议。
翻译作者:码农网 – 苏文鹏