JMX,全称Java Management Extensions
,借用贾宝玉的一句话描述它:「这个妹妹,我曾见过的。」
见过却不熟悉,它在我心中是Java规范中比较冷门的一个角落。
几次看到Java的招聘JD要求对JMX的理解,所以,在Oracle官网翻到教程,跟着学习学习。
Oracle教程地址
Java Management Extensions(JMX): Table of Contents
这份文档讲的内容很基础,介绍了JMX的整体架构、用处、基础组件,以及给出了带代码的简单演示。
JMX用来做什么?
JMX是Java 标准规范的一部分,可以用来 监控 和 管理 JVM中运行时的资源。除了监控运行时占用的CPU、内核、线程资源,JMX还可以让你直接invoke 方法、修改对象属性(有点暴力了吧。。)。
- JDK中自带的jconsole
工具,利用的就是JMX。
JMX可以将管理接口暴露成HTTP调用,这样,通过ip和端口号可以远程监控、管理服务器上的JVM。
- 远程调试需要打开服务器上打开某个端口,利用的也是JMX。
- Tomcat有个HTTP 的管理页面,用的也是JMX。
JMX怎么用
监控JVM
JVM自带支持JMX,开箱即用(out-of-box
)。意味着,不需要额外操作就可以用jconsole
之类的命令监控JVM。监控Applicaiton
Application的实现得满足JMX标准。JMX标准是什么,见下文。
JMX标准
MBeans
JMX将它管理的对象称为MBean
。换言之,要使用JMX,就得把要管理的资源封装成MBeans。JMX定义了几类
MBeans
,就标准MBeans(Standard MBeans
)而言,它是这么定义的:后缀为MBean
的interface(例如HelloMBean
), 以及除去MBean
后缀的实现MBean的实现类(这里就是Hello
)。JMX Agent
JMX Agent又称为JMX Server,用来管理MBeans。关键的代码类似:
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("com.example:type=Hello"); Hello mbean = new Hello(); mbs.registerMBean(mbean, name);
JMX Connector
用JVM connector
,MBean可以暴露给远程客户端,然后远程客户端就可以管理它了。常用的Connector包括:HTTP,RMI。与之对应的管理client: web浏览器,JMX Client。
JMX的通知机制
JMX允许MBeans发送通知。
如果MBeans实现了发送Notification的逻辑,就可以用jconsole
一类的工具收到通知。