JMX是Java Management Extensions 的简写,即Java管理扩展

JMX是Java Management Extensions 的简写,即Java管理扩展。从名字中就可以看出,这门技术是对Java应用程序和JVM进行监控和管理的。

在企业实际开发过程中,所有的程序都是需要进行监控的。没有监控,程序就相当于是裸奔。

QQ截图20160113230655.png

在一些小公司可能没有监控,只注重于功能,但是在大公司中,没有监控是绝对不可能的。

JMX是Java官方提供的一套用于监控Java程序和JVM运行时状态的标准API。通过JMX,我们可以监控的内容包括:

1、服务器中各种资源的使用情况:如CPU、内存等

2、JVM内存使用情况

3、JVM中的线程情况

4、JVM中加载的类

....

        相信通过这些介绍,读者已经感受到了JMX的强大功能。而且因为JMX是J2SE平台的标准组成部分,意味着我们使用JMX时,不需要引入任何第三方jar包,直接可以进行开发。远离裸奔,从JMX开始!


2 JMX技术概览
 2016-01-14 20:58:27  419


Java Management Extensions (JMX)技术是Java Platform, Standard Edition (Java SE platform)的一个标准部分。JMX技术自J2SE 5.0版本加入该平台。
      JMX技术为管理诸如应用程序设备服务之类的资源提供了一种简单的、标准的方法。JMX技术是动态的,你可以用它来监控和管理资源的创建、安装和实现。你也可以用JMX技术来监控和管理Java虚拟机(Java VM)。

举例来说,下图是一张JMX监控的概览图,我们理解以下应用程序设备服务之类的资源监控的含义:

QQ截图20160113231754.png

在这张图中:

对设备的监控:体现在CPU的使用率上,因为CPU就是物理设备。当然我们可以监控的不光是CPU,内存、硬盘灯信息我们都可以监控。

对JVM的监控:体现在堆内存、线程数的统计上。监控的内容也不仅仅是这些,可以有更多。

对应用程序的监控:体现在加载的类的数量上,当然我们还可以监控其他方面内容。


最后,如果我们自己想编写一套类似以上的监控程序,或者我们想监控更多、更详细的监控内容,应该怎么怎么办呢?。

我们必须要了解JMX的技术架构、相关API等概念。JMX规范定义了JMX架构、设计模式、API以及用于管理和监控应用程序以及网络的Java服务。在下一节中,我们将详细的介绍JMX的技术架构。

2.1 JMX技术架构
 2016-02-22 23:26:50  529


  本节讲解JMX的技术架构, JMX技术可以被分为3层,如下:

    * 监测(Instrumentation)
    * JMX代理
    * 远程管理


如下图:

乍一看这张图,读者可能会比较晕,不过没关系,下文将会详细的解释。我们从最下面的一层Instrumentation Level(监控层)开始讲解。


监测(Instrumentation)

        回顾上一节,我们使用JMX可以监控服务器内存、CPU,可以监控JVM的堆内存、线程数等指标。监控的含义就体现在这,我们可以使用JMX来监控任何我们关心的性能指标。

        Oracle官方文档将监控各项指标称之为“监控资源”,个人认为,用“监控指标”可能更具有说服力。所以后文在提到“监控指标”或者“监控资源”的时候,其实都是一个含义。 以下为JMX官方文档关于监控的讲解的中文翻译:   

        “要想利用JMX技术来管理资源,你首先必须用Java编程语言来监测(instrument)该资源。你使用叫做MBeans的Java对象来实现对该资源的监测信息的访问。”

翻译成大白话就是:

        我们对关心的各项性能指标的监控,都是通过称之为MBean的Java对象来实现的。我们可以用一个MBean来监控操作系统的基本信息,用一个MBean来监控JVM的信息,用一个MBean监控应用程序....。


总结:监控层的作用就是使用MBean来监控我们关心的性能指标。因为我们通常关注的性能指标比较多,通常情况下,在监控层我们会有多个MBean,每个MBean监控一类信息。


JMX Agent(代理)

        我们已经知道,在监控层通常会有很多的MBean,用于监控不同的指标。一旦一个资源被MBeans监测,就可以通过一个JMX代理来管理它。

那么JMX代理是什么呢?

        你可以将JMX代理想象成一个容器,所有的MBean都注册到这个容器中。这个容器可以接受外部的请求,返回MBean的监控信息。当我们想从远程获取某个MBean的检测信息,我们就给这个容器发送一个请求,由这个容器将这个MBean的检测信息返回给我们。

        这很像一个Web服务器的作用,通常一个Web服务器中可以有多个Servlet,我们想请求某个Servlet时,只要指定URL,由WEB服务器来调用对应的Servlet方法,并将结果返回。所不同的是,JMX代理是内嵌在我们的Java应用程序中的,而不是像Tomcat这样的Web容器,单独起一个JVM进程来运行。

以下还是官方的一段介绍:        

MBeans不需要知道它们将要操作的JMX代理的信息。
MBeans设计目标为灵活、简单并方便实现。应用程序、系统和网络开发者可以以标准的方式让其产品成为可管理的产品,而不必理解或投资复杂的管理系统。可以以很小的代价将已有的资源改造成可管理的。

这段话,同样可以类比Web容器进行理解:我们写的Sevlet可以运行在Tomcat中,也可以运行在其他的Web容器中,如Jetty、Weblogic等。这些Web容器的实现方式可能不同,但是我们的Servlet都可以运行,因为这些WEB容器都实现了Servlet规范。对于JMX而言,而在不同版本JDK中,可能JMX代理的实现方式有所不同,但是只要其实现了JMX规范,我们的MBean都可以运行。


容器的作用,只是JMX代理最为核心的功能。在JMX中,我们将这种容器称之为MBean Server。

        JMX Agent的核心组件是MBean server,它是一个被管理对象的服务器,MBeans在其中注册。一个JMX代理还包括一组用于管理MBeans的服务和至少一个通信适配器(adaptor)或连接器(connector) 以供管理程序访问

        如果对比WEB容器的作用的话,相信这段话你也很容易就理解了。


最后再来一段废话,当然这段废话不是我说的,能说出这种废话的,当然是官方文档:  

  
        当你实现一个JMX代理的时候,你不需要知道它将会管理的资源的语义和功能。实际上,JMX Agent甚至不需要知道它将会服务哪些资源,因为任何资源,只要其监测兼容JMX规范,就能够使用任何JMX Agent为这些资源提供它们所需要的服务。类似地,JMX代理不需要知道将要访问它的管理程序的功能。

还是类比WEB容器,一个WEB容器可以运行不同功能的应用,你可以在上面跑一个电商网站,也可以是一个博客系统。对于JMX而言,不管你写什么MBean,来监控什么指标,  反正JMX代理上都能跑。      


远程管理(adaptors/connectors client)

        通常情况下,我们会用使用一个远程客户端连接MBean Server来获取MBean的监控信息。道理很简单,方便查看和管理。一方面,通过远程客户端,我们可以更好的查看检测到的信息,例如将监控信息在浏览器中展现出来,甚至可以做图表进行展现变化趋势;更为重要的是,企业中通常会有很多运行在不同服务器上的应用,每个应用都需要监控,我们可以编写一个远程客户端,这个远程客户端可以连接到所有要监控的服务器。

      

  JMX 可以以多重方式来访问JMX技术监测信息,既可以通过现有的管理协议,比如简单网络管理协议(SNMP),也可以通过专利性的协议。MBean server依赖协议适配器(adaptors)和连接器(connectors)来让JMX代理供管理程序(位于JMX代理所在的JVM之外)访问。
每个适配器都通过一个特定的协议提供一个包含了所有注册在MBean Server中的MBeans的视图。比如,一个HTML适配器可以在一个浏览器中显示一个MBean。

        连接器提供一个 管理器侧的 接口,该接口处理管理程序和JMX Agent之间的通信。不同的连接器 通过不同的协议 提供相同的远程管理接口。当一个远程管理程序使用该接口时,它可以通过网络透明地连接到一个JMX Agent,而不论该协议是什么。JMX技术提供一个标准的方案,用于导出基于JMX技术的监测信息,供基于Java RMI的应用程序使用。
 

http://www.tianshouzhi.com/api/tutorials/jmx/31




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值