JMX 规范将整个管理结构主要分为三个部分:

  • Instrumentation level ,该层用来提供JMX可监控资源。
  • Agent level ,该层用来直接管理上一层的资源,而且允许资源可以被远程控制。
  • Distributed services level ,该层定义了如何控制 Agent Level 层的接口和组件。

其架构示意图如下所示:
image.png
FROM 《JMX1.4 Specification》

Instrumentation Level 在最下一层,提供了可监控资源的载体 MBean ,在其上一层的 Agent Level 通过 MBeanServer 对外提供对 MBean 管理的功能,而最上层的 Distributed Services Level 提供了多种形式的连接方式:

  • 采用JMX的管理应用:双方通过 Connector 连接
  • 采用某种协议的应用(比如浏览器):使用 Protocol Adaptor 连接
  • 第三方不兼容JMX的管理应用:通过 JMX Manager 连接

这幅图的右边还有管理协议接口,这一块的具体作用还不太清楚,但是JMX整体架构已经挺明了了

Instrumentation Level

JMX manageable resource can be an application, an implementation of a service, a device, a user, and so forth.

只要遵守JMX规范,资源可以是一个应用程序,可以是一个服务,也可以是一个设备等等。
因为它们都跑在JVM上,只要资源载体遵守JMX规范就能将资源数据暴露出去,那么无论是啥都可以被管理起来。

In addition, the instrumentation level also specifies a notification mechanism. This allows MBeans to generate and propagate notification events to components of the other levels.

Instrumentation Level 允许 MBean (资源载体)可以创建和传播消息通知给其他层的组件
最典型的,比如 JConsole 的数据(比如堆内存)会实时发生变化。当程序的持续运行,堆内存数据发生变化后就会创建一个消息通知给上层组件。

总而言之,这一层主要就这两个功能:

  • MBean资源载体:载体的种类很多,不同的种类影响的只是开发方式不会影响管理方式
    • Standard MBeans 👈常用
    • Dynamic MBeans
    • Open MBeans
    • Model MBeans
  • 消息通知:当数据发生改变,发送消息给Listener。

Agent Level

这一层包含三块内容:xingxing

  1. 🌟MBean Server ,用来注册 MBean 的中心服务,只有本地程序能对MBean 执行注册/删除
  2. Agent Services ,用来调用 MBean 对外提供的操作
  3. Protocol Adaptors and Connectors ,连接器

🌟MBean Server

这部分是 Agent Level 的核心组件,所有的要暴露到外部的 MBean 都要注册到 MBServer 里。

Agent Services

这一块苦恼了我挺久的,因为始终没明白它到底想说啥。后来在 jboss 的网站上看到了它对 Agent Services 的理解:

The JMX agent services are objects that support standard operations on the MBeans registered in the MBean server. The inclusion of supporting management services helps you build more powerful management solutions. Agent services are often themselves MBeans, which allow the agent and their functionality to be controlled through the MBean server. The JMX specification defines the following agent services

大部分内容和官方的差不多,但是点出来了大多数的 Agent Service 就是 MBean 本身,可以理解为一些带有操作的 MBean 本身就算做 Agent Service ,正如架构图里所示,有些 MBean 是作为 Agent Service ,有些 MBean 仅作为资源。

官方已经提供了一些 Agent Service

  • javax.management.loading.MLetMBean :动态加载字节码,如果是不存在的字节码就从网络里下载
  • javax.management.monitor.MonitorMBean :监控几个属性的变化,如果发生变化就会触发通知
  • javax.management.timer.TimerMBean :会间隔时间发送通知
  • javax.management.relation.RelationServiceMBean ,维护角色用的??未知

一般兼容JMX服务的管理应用都会提供上述的 Agent Service

Protocol Adaptors and Connectors

这两个归到 Agent Level 是因为这两货都是对外提供连接的, Protocol Adaptors 直接返回管理视图(协议数据,比如HTML)给远程客户端; Connectors 包含了 Client ConnectorServer ConnectorClient 可以通过 Client Connector 连接 Server Connector 来操控 Agent Service
因为官方没有提供 Protocol Adptor 的实现,只包含了 Connector ,所以官方文档看起来只写了 Connector

Distributed Services Level

这一层主要定义了管理应用如何来连接到 Connector/Protocol Adptor 进行管理。

参考资料