第1章 JMX技术概览

来源:互联网 发布:log4j2连接数据库 编辑:程序博客网 时间:2024/05/22 00:15

前言

JMX快速入门》介绍了在Java标准平台中的JMX技术。本文通过几个示例介绍如何使用JMX技术的最重要的特性。

  1. JMX技术概览,概要描述JMX技术,包括它的目的和主要特性。
  2. MBean介绍,介绍JMX技术MBeanMXBean的基本概念。
  3. Notification通知,介绍JMX技术的通知机制。
  4. 远程管理,说明如何实现JMX API的远程管理能力以及如何创建一个JMX客户端应用程序。

第1章 JMX技术概览

    JMX技术是Java平台标准版(Java SE)的一部分。JMX技术曾被添加到Java 2平台(J2SE 5.0

    JMX技术提供了一种简单的标准方式来管理资源,例如应用、设备服务。因为JMX技术是动态的,你可以使用它监控和管理资源的创建、安装和执行。你也可以使用JMX技术监控和管理Java虚拟机。

    JMX规范定义了在Java语言中监控和管理应用和网路的架构、设计模式、API和服务。使用JMX技术,用一个或多个称为MBeanJava对象来给特定的资源装上仪器。这些MBean注册到一个核心管理对象服务器中,称为MBean服务器。MBean服务器扮演了一个管理代理的角色,可以运行在大多数支持Java的设备上。

    JMX规范定义了JMX代理。使用JMX代理可以管理任何进行了正确的管理配置的资源。JMX代理由MBean服务器和一组处理MBean的服务组成,MBean注册到MBean服务器中。用这种方式,JMX代理可以直接控制资源,并使得应用可以被远程管理。

    给资源装仪器的方式完全与管理基础架构独立。因此不管它们的管理应用是怎么实现的,资源可以变成可被管理的。

    JMX技术定义了标准的连接器,称为JMX连接器。JMX连接器使你能远程访问JMX代理。JMX连接器使用不同的协议提供了相同的管理接口。因此不管用的通信协议是什么,管理应用都可以透明地管理资源。即使系统和应用不符合JMX规范,只要这些系统和应用支持JMX代理,系统和应用就可以使用JMX代理。

1.1 为什么使用JMX技术?

    JMX技术提供了一种灵活的方式来给基于Java技术的应用程序(Java应用)装上仪器,创建智能代理,实现分布式管理中间件和管理者,平滑集成这些解决方案到已经存在的管理和监控系统中。

  • JMX技术使得Java应用程序不需要大量的投入就可以被管理
    基于JMX技术的代理(JMX代理)可以运行在大多数支持Java的设备上。因此Java应用可以变成可被管理的,且对它们的设计没有影响。一个Java应用只需要嵌入到被管理的对象服务器中,并且使它的一些功能可以被一个或多个注册到服务器中的MBean使用。这就是从管理基础架构中获益所付出的代价。
  • JMX技术提供了一种标准方式来管理Java应用、系统、网路
    例如,Java平台企业版(Java EE)5应用服务器符合JMX架构,因此可以使用JMX技术管理它。
  • JMX技术被用于Java虚拟机的即开即用管理
    Java虚拟机(Java VM)使用JMX技术高度装备了仪器。你可以启动一个JMX代理来访问Java内置的虚拟机仪器,从而远程监控和管理Java虚拟机。
  • JMX技术提供了一个可扩展的、动态的管理架构
    每一个Java代理服务都是一个独立的模块。这些模块可以按照需求插入到管理代理中。这个基于组件的方法意味着JMX解决方案可以应用于小型设备、大的通信交换机、甚至更大的设备。JMX规范听了一组核心的代理服务。在管理基础架构中,额外的服务可以被开发并动态加载、卸载、更新。
  • JMX技术借用已经存在的标准Java技术
    无论什么时候需要,JMX规范会引用已经存在的Java规范,例如,Java命名和目录接口(JNDIAPI
  • 基于JMX技术的应用(JMX应用)可以从一个NetBeans模块创建
    你可以从NetBeans Update Center获取一个模块(选择Tools -> Update Center),这个模块能让你用NetBeans IDE创建JMX应用。这减少了开发JMX应用的花销。
  • JMX技术可以集成到已有的解决方案里,合并技术
    JMX API是开放的接口,任何管理系统供应商都可以实现它。JMX解决方案可以使用查询和发现服务和协议,例如,Jini网络技术和服务位置协议(SLP)。

 

1.2 JMX技术概览

     JMX技术可以分为如下的三个级别:仪器、JMX代理、远程管理。

1.2.1 仪器

   为了使用JMX技术管理资源,你首先必须用Java语言为资源装上仪器。你要使用称为MBeanJava对象来实现访问装在资源上的仪器。MBean必须遵守JMX规范定义的设计模式和接口。这样做事为了确保所有的MBean都用标准化的方式提供了管理资源的仪器。除了标准MBeanJMX规范也定义了一种特殊类型的MBean,称为MXBeanMXBean是一种只引用预定义的数据类型的MBean。还存在一些其他类型的MBean,但这个快速入门教程只关注标准MBeanMXBean

    一旦资源被MBean装上仪器,就可以通过JMX代理来管理它。MBean不需要知道它们运行所在的JMX代理。

    MBean被设计成灵活的、简单的、容易实现的接口。应用程序、系统、网络的开发者可以用标准方式使它们的产品变得可被管理,而不需要理解和投入复杂的管理系统。可以投入很少的努力,使已有的资源也可以被管理。

    另外,JMX规范仪器级别提供了通知机制。这个机制使得MBean能够产生并传播通知事件给其他级别的组件。

1.2.2 JMX代理

    基于JMX技术的代理(JMX代理)是一个标准的管理代理,直接控制资源,并可远程管理。JMX代理与资源通常位于相同的机器上,但是这个安排不是必须的。

    JMX代理的核心组件是MBean服务器,MBean就是注册在这个管理服务器中。JMX代理也包含一组管理MBean的服务,至少一个通信适配器或和连接器允许管理程序访问它们。

    当你实现一个JMX代理时,你不必了解资源的功能和语义。事实上,JMX代理甚至不必知道它要服务那些资源,因为任何装上仪器的资源,只要符合JMX规范,都可以使用任何JMX代理,只要代理能够提供资源需要的服务。类似的,JMX代理也不必知道访问它的管理应用程序的功能。

1.2.3 远程管理

    可以用许多不同的方式访问JMX仪器,要么通过已有的管理协议,例如简单网络管理协议(SNMP),要么通过专用的协议。MBean服务器依赖于协议适配器和连接器(连接器可以让位于代理所在Java虚拟机外面的管理应用访问JMX代理)。

    每一个适配器通过特定的协议提供了注册到MBean服务器中的所有MBean的视图。例如,一个HTML适配器可以在浏览器中显示MBean

    连接器提供了一个管理接口来处理管理者和JMX代理之间的通信。每一个连接器通过不同的协议提供了相同的远程管理接口。当一个远程管理应用使用这个接口时,它可以通过网络透明地连接到JMX代理,而不管连接器到底用的什么协议。JMX技术提供了一个标准的解决方案将JMX仪器输出给远程应用(Java远程方法调用RMI)。


1.3监控和管理Java虚拟机

    JMX技术也可以用来监控和管理Java虚拟机。

    Java虚拟机有内置的仪器,可以使你用JMX技术监控和管理它。这些内置的管理仪器经常被称作即开即用的管理工具。为了监控和管理Java虚拟机的方方面面,Java虚拟包含了一个平台MBean服务器和特殊的MXBean,遵循JMX规范的管理应用程序可以用这些MXBean

 

1.3.1 平台MXBean和平台MBean服务器

    平台MXBean是一组MXBean,这些MXBean提供给Java SE平台用于监控和管理Java虚拟机和JRE的其他组件。每一个平台MXBean封装了Java虚拟机的一部分功能,例如类加载系统、JIT编译系统、垃圾回收GC等等。为了使你监控和管理这些不同的Java虚拟机的功能,监控和管理工具可以将这些MXBean可以显示出来并可与之交互。Java SE平台的JConsoleGUI)就是这样一个监控和管理工具。Java SE平台提供了一个标准的平台MBean服务器,平台MXBean都注册到了这个服务器中。平台MBean服务器也可以注册任何其他你希望创建的MBean

 

1.3.2 JConsole

    Java SE平台包含JConsole监控和管理工具,遵循JMX规范。JConsole使用Java虚拟机大量的仪器(平台MXBean)来提供关于应用性能和资源占用的信息。

 

1.3.3 即开即用的管理

    因为标准的监控和管理实用工具(实现了JMX技术)内置到了Java SE平台中,你可以看到在实际使用这些即开即用的JMX技术,不必写一行JMX API的代码。你可以启动一个Java应用,然后使用JConsole监控它。

 

1.3.4 使用JConsole监控一个应用

    下面显示如何监控Notepad应用。在Java SE 6.0之前的发布版下,你想要用JConsole监控应用,需要用下面的选项启动你的应用:-Dcom.sun.management.jmxremote

    不过,Java SE 6平台提供的JConsole可以关联到任何支持关联API应用。换言之,任何在Java SE 6 HotSpot虚拟机中启动的应用都能自动被JConsole检测到,不需要使用上面的命令选项启动。

    在终端窗口或命令行窗口,使用下面的命令启动Notepad Java应用程序:

1. java -jar  jdk_home/demo/jfc/Notepad/Notepad.jar

    jdk_homeJDK安装的目录。如果你运行的不是Java SE 6平台,你需要使用下面的命令:

     java -Dcom.sun.management.jmxremote -jar jdk_home/demo/jfc/Notepad/Notepad.jar
2. 一旦Notepad打开了,在不同的终端窗口或命令行窗口,使用下面的命令行启动JConsolejconsole

    一个“新建连接”对话框就会出来。

3. 在“新建连接”对话框中,从本地进程列表选择Notepad.jar,点击“连接”按钮。


    JConsole打开并把自己连接到Notpad.jar进程。当JConsole打开后,呈现在你面前的是关于Notepad监控和管理信息的概览。例如,你可以看到 应用消耗的堆内存数量,应用当前运行的线程数量,还有应用消耗的CPU的容量。

4. 点击不同的JConsole标签。

    每一个标签都呈现了Notpad运行所在的Java虚拟机的不同功能区域更加详细的信息。所有呈现的信息都是通过本入门教程提到的不同的JMX MXBean获取的。所有的平台MXBean都可以在“MBean”标签中显示出来。“MBean”标签在这个教程的下一节来讲解。

5. 要想关闭JConsole,选择连接->退出。