搜索
您的当前位置:首页正文

jmx扩展mbean的使用

来源:步旅网


jmx(java management extentions)(java管理扩展)。
简单的说就是一套架构,可以监控jvm等信息。

第一个MBean例子

先来看下规范,标准的定义不太好理解,自己整理了下就比较简单了。
1、接口定义必须是MBean结尾或DynamicMBean结尾,如HelloMBean。
2、实现类去掉MBean。
3、接口和实现类需要在同一个包下。

接口类HelloMBean
public interface HelloMBean {
    public void sayHello();
    public String getName();
    public int getCacheSize();
    public void setCacheSize(int size);
}

实现类Hello

public class Hello implements HelloMBean {
    private String name = "World";
    private int cacheSize = 100;
    public void sayHello() { System.out.println("hello, world"); }
    public String getName() { return name; }
    public int getCacheSize() { return cacheSize; }
    public void setCacheSize(int size) { cacheSize = size; }

	public static void main(String[] args) {
	        try {
	            MBeanServer server = ManagementFactory.getPlatformMBeanServer();
	            ObjectName name = new ObjectName("com.custom:type=Hello");
	            server.registerMBean(new Hello(), name);
	            // 注:这一行很重要,如果只执行一下就没了,那么注册不上的
	            // 测试完记得关掉,因为while一直跑着很消耗性能
				while (true){}
				      
	        }catch (Exception e){
	            e.printStackTrace();
	        }
	
	    }
}

运行main方法,该程序会一直执行。

jconsole连接Hello

连接 | 新建连接 | 正常应该有Hello,选中即可,就可以看到监控图了。

jconsole如果看不到Hello

看下java程序是否还在,如果没有加while,只执行一下,那么肯定看不到。

报错 MBean class com.Hello does not implement DynamicMBean, and neither follows the Standard MBean conventions

最后发现是没有在同一个包下。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top