1. JMX介绍
JMX是Java Management Extensions的缩写,意为Java管理扩展,是一个标准也是一个框架,用来监控和管理JVM上面的资源,例如我们用jvisualvm监控远程的JVM时,远程需要开启JMX;
1.1 JMX架构
JMX作为一个标准和框架,要实现JMX编程必须基于其架构,架构就是与其相关的一些概念或架构分层;
JMX有一个MBean / 管理组件的概念,MBean是Management Bean的缩写,是对JVM上面所有资源的抽象,MBean作为一种Java对象,可以通过MBean的属性和方法访问JVM上面的各种资源;
JMX的架构由 分布层、代理层、设备层 组成;
设备层/MBean:将所有资源抽象成MBean组件,通过MBean访问资源,共有4类MBean,通常接触的都是标准MBean:
- 标准MBean:StdMBean接口描述行为,Std类实现行为; 要求:①接口和类必须在一个包下 ②接口名MBean结尾,实现类名为接口名前半部分;
- 动态MBean:实现DynamicMBean接口,接口中getMBeanInfo方法返回的MBeanInfo包含有哦此MBean暴露的所有属性(MBeanAttitudeInfo)和方法(MBeanOperationInfo),此MBeanInfo可以动态扩展;
- 开放MBean:忽略
- 模型MBean:忽略
- MXBean:MyMXBean接口描述行为,实现类实现行为且类名随意,要求:接口名MBean结尾或者接口用@MXBean注解;
代理层/MBeanServer:存放MBean组件的容器,提供注册和请求MBean的功能,容器就是管理组件服务器 / MBeanServer,创建管理组件服务器时需要制定服务器的域名,当向管理组件服务器注册管理组件时需要指定一个ObjectName对象来标识管理组件,ObjectName对象由域名和键值对列表构成,域名就是创建管理组件服务器的域名,键值对用来区分不同的MBean至少有一对且一般有name=XXX;
分布层:管理客户端如何访问管理组件服务器中的管理组件,有协议适配器或连接器两种实现形式,而适配器和连接器也作为一种MBean注册到管理组件服务器,常见的就是HTML适配器和RMI连接器,HTML适配器可以用浏览器客户端访问,RMI连接器可以用JConsole客户端访问;
1.2 JMX编程元素
编程元素就是如何按照JMX架构提供的规范来编写代码,JMX编程一般分为编写管理组件和编写管理组件服务器;
管理组件:包括设备层和分布层,分布层的适配器和连接器组件不需要自己编写,引入jar包即可,所以一般指编写自定义的管理组件,一般是标准MBean;
管理组件服务器:指代理层,分为三步,创建管理组件服务器