简言

通过JMX监控可以获取更详细的监控数据来让我们运维人员方便的分析系统的运行状况和系统存留的风险,这里我们来学习下JMX的相关内容。

JMX是什么

JMX全称为Java Management Extensions,翻译过来就是Java管理拓展,用来管理和检测Java程序。最常用到的就是对于JVM的监测和管理,比如 JVM 内存、CPU 使用率、线程数、垃圾收集情况等等。另外,还可以用作日志级别的动态修改,比如 log4j 就支持 JMX 方式动态修改线上服务的日志级别。最主要的还是被用来做各种监控工具。

JMX的体系结构

  • 分布层:是JMX架构对外一层,分布层负责使用JMX代理对外部世界可用。有两种类型的分布式交互。第一种类型是由适配器来实现,它通过HTTP或SNMP一类的协议提供了MBean的可见性。第二种类型是连接器,它将代理的API暴露给其它分布式技术,如Java RMI。(管理访问框架接口)
  • 代理层:代理层主要组件是MBean服务器,MBean服务器提供MBean的注册使用,它是JMX代理的核心。(访问资源接口)
  • 指令层:指令层是接近管理资源的一层,它由代理中注册的MBean构成MBean使得资源可以通过代理来被管理。(处理资源)

在java中通过以上三层的处理将jvm的resource获取到。在java se中提供了jmx在jdk的一个应用包:java.lang.management 、javax.management。

JMX的重要概念

1)MBean:

​ Managed Bean-被管理资源实例。

​ 通过MBean暴露一系列方法和属性,外界可以获取被管理资源的状态,并管理其行为。

​ MBean有四种类型:标准MBean,动态MBean,开放MBean,模型MBean

(2)MBean Server:

​ MBean Server是MBean的容器。

​ 注册Adapter、Connector、MBean,并直接管理MBean

(3)JMX Agent:

​ Agent只是一个Java进程,它包括这个Mbean Server和一系列附加的Mbean Service。

(4)ProtocolAdapters and Connectors:

​ JMX Agent通过各种各样的Adapter和Connector来与外界(JVM之外)进行通信。同样外界(JVM之外)也必须通过某个Adapter和Connector来向JMX Agent发送管理或控制请求。Jdmk5.1中,sun提供很多Adaptor和Connector的实现。

​ Adapter和Connector的区别在于:Adapter是使用某种协议(HTTP或者SNMP)来与JMX Agent获得联系,Agent端会有一个对象(Adapter)来处理有关协议的细节。比如SNMP Adapter和HTTP Adapter。而Connector在Agent端和client端都必须有这样一个对象来处理相应的请求与应答。比如RMI Connector。

结语

简单来说就是让程序有被管理的功能,它的应用场景非常多。总的来说只要是运行在java虚拟机上的应用,例如tomcat、jboss、webapp等都可以通过jmx方式来进行数据监控或者在程序运行的状态下对程序进行“操作”,在不需要太多的工作和努力情况下让开发或者运维人员对程序的运行及其所处理的数据的性质获得深入了解。总的来说:JMX 既是 Java 管理系统的一个标准,一个规范,也是一个接口,一个框架。