Java Management Extensions (JMX) 学习札记- 程序管理和监控
Java Management Extensions (JMX) 学习笔记- 程序管理和监控
在学习Tomcat 7 的源代码的时候发现,大量运用到了JMX, MBeans,所以决定先学习一下。
介绍
JMX是Java 5开始引入的API。这个API意在帮助管理和监控资源: applications, devices, services, and the Java virtual machine. 你可以用JMX API来:
你也可以远程的访问JVM,从而远程管理和监控。
MBean, managed bean,受管的bean
Mbean其实也是一种Java Bean,特别之处就在于它是在管理之下的。所谓受管就是说它提供了读写的API。有四种MBean:standard MBeans, dynamic MBeans, open MBeans and model MBeans. 下面是一个standard MBeans的例子:
先定义接口:
再定义实现:
JMX agent, MBean server
MBean是通过注册在JMX agent,也就是 MBean server中,从而被暴露出去而被管理的。
下面是这个agent 的使用实例:
运行Main类,之后它就等待被访问和修改。你可以用jconsole去尝试查询和修改。
控制台输出:
在学习Tomcat 7 的源代码的时候发现,大量运用到了JMX, MBeans,所以决定先学习一下。
介绍
JMX是Java 5开始引入的API。这个API意在帮助管理和监控资源: applications, devices, services, and the Java virtual machine. 你可以用JMX API来:
- 查询和修改应用配置
- 应用行为统计
- 状态改变和出错通知
你也可以远程的访问JVM,从而远程管理和监控。
MBean, managed bean,受管的bean
Mbean其实也是一种Java Bean,特别之处就在于它是在管理之下的。所谓受管就是说它提供了读写的API。有四种MBean:standard MBeans, dynamic MBeans, open MBeans and model MBeans. 下面是一个standard MBeans的例子:
先定义接口:
package com.example.mbeans; public interface HelloMBean { public void sayHello(); public int add(int x, int y); public String getName(); public int getCacheSize(); public void setCacheSize(int size); }
再定义实现:
package com.example.mbeans; public class Hello implements HelloMBean { public void sayHello() { System.out.println("hello, world"); } public int add(int x, int y) { return x + y; } public String getName() { return this.name; } public int getCacheSize() { return this.cacheSize; } public synchronized void setCacheSize(int size) { this.cacheSize = size; System.out.println("Cache size now " + this.cacheSize); } private final String name = "Reginald"; private int cacheSize = DEFAULT_CACHE_SIZE; private static final int DEFAULT_CACHE_SIZE = 200; }
JMX agent, MBean server
MBean是通过注册在JMX agent,也就是 MBean server中,从而被暴露出去而被管理的。
下面是这个agent 的使用实例:
package com.example.mbeans; import java.lang.management.*; import javax.management.*; public class Main { public static void main(String[] args) throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name = new ObjectName("com.example.mbeans:type=Hello"); Hello mbean = new Hello(); mbs.registerMBean(mbean, name); System.out.println("Waiting forever..."); Thread.sleep(Long.MAX_VALUE); } }
运行Main类,之后它就等待被访问和修改。你可以用jconsole去尝试查询和修改。
控制台输出:
Waiting forever... hello, world Cache size now 300 hello, world
1 楼
stormhouse
2012-04-09
写的很精练易懂啊,最也在看tomcat代码,我看的是6版本的,向您学习啊
2 楼
JackyCheng2007
2012-04-09
共同学习,互相切磋