Java SE 6 新特性: JMX 与系统管理
来源:网络 更新时间:2014-12-16
前言
在Java程序的运行过程中,对JVM和系统的监测一直是Java开发人员在开发过程所需要的。一直以来,Java开发人员必须通过一些底层的JVMAPI,比如JVMPI和JVMTI等,才能监测Java程序运行过程中的JVM和系统的一系列情况,这种方式一直以来被人所诟病,因为这需要大量的C程序和JNI调用,开发效率十分低下。于是出现了各种不同的专门做资源管理的程序包。为了解决这个问题,Sun公司也在其JavaSE5版本中,正式提出了Java管理扩展(JavaManagementExtensions,JMX)用来管理检测Java程序(同时JMX也在J2EE1.4中被发布)。
JMX的提出,让JDK中开发自检测程序成为可能,也提供了大量轻量级的检测JVM和运行中对象/线程的方式,从而提高了Java语言自己的管理监测能力。
JMX和系统管理
管理系统(ManagementSystem)
要了解JMX,我们就必须对当前的IT管理系统有一个初步的了解。随着企业IT规模的不断增长,IT资源(ITresource)数量不断增加,IT资源的分布也越来越分散。可以想象,甚至对于一家只有几百台PC公司的IT管理人员来说,分发一个安全补丁并且保证其在每台PC上的安装,如果只依赖人工来完成那简直就是一场噩梦。这样,IT管理系统就应运而生。
然而,CPU、网卡、存储阵列是IT资源;OS、MSOffice、Oracledatabase、IBMWebsphere也是IT资源。IT管理系统若要对这些IT资源进行管理,就必须对这些管理对象有所了解:形形色色的IT资源就像是说着不同语言的人:Oralce数据库表达内存紧张的方式和WindowXP是绝然不同的,而IT管理系统就像建造通天塔的经理,必须精通所有的语言,这几乎是一个不可能完成的任务。难道IT管理系统是另外一个通天塔吗?当然不是!其实我们只要给每个IT资源配个翻译就可以了。
管理系统的构架
图1.管理系统构架
上图分析了管理系统的基本构架模式。其中Agent/SubAgent起到的就是翻译的作用:把IT资源报告的消息以管理系统能理解的方式传送出去。
也许读者有会问,为什么需要Agent和SubAgent两层体系呢?这里有两个现实的原因:
管理系统一般是一个中央控制的控制软件,而SubAgent直接监控一些资源,往往和这些资源分布在同一物理位置。当这些SubAgent把状态信息传输到管理系统或者传达管理系统的控制指令的时候,需要提供一些网络传输的功能。管理系统的消息是有一定规范的,消息的翻译本身是件复杂而枯燥的事情。 一般来说,管理系统会将同一物理分布或者功能类似的SubAgent分组成一组,由一个共用的Agent加以管理。在这个Agent里封装了1和2的功能。
JMX和管理系统
JMX既是Java管理系统的一个标准,一个规范,也是一个接口,一个框架。图2展示了JMX的基本架构。
图2.JMX构架
和其它的资源系统一样,JMX是管理系统和资源之间的一个接口,它定义了管理系统和资源之间交互的标准。>javax.management.MBeanServer实现了Agent的功能,以标准的方式给出了管理系统访问JMX框架的接口。而>javax.management.MBeans实现了SubAgent的功能,以标准的方式给出了JMX框架访问资源的接口。而从类库的层次上看,JMX包括了核心类库>java.lang.management和>javax.management包。>java.lang.management包提供了基本的VM监控功能,而>javax.management包则向用户提供了扩展功能。