`
JackyCheng2007
  • 浏览: 249583 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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的例子:
先定义接口:
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



  • 大小: 58.8 KB
分享到:
评论
4 楼 daxiaoli123 2014-05-11  
请问还有后续的吗  这个是最基础的啊
3 楼 fujuya 2012-11-08  
mark
2 楼 JackyCheng2007 2012-04-09  
共同学习,互相切磋
1 楼 stormhouse 2012-04-09  
写的很精练易懂啊,最也在看tomcat代码,我看的是6版本的,向您学习啊

相关推荐

Global site tag (gtag.js) - Google Analytics