码迷,mamicode.com
首页 > 编程语言 > 详细

[Java]JMX

时间:2014-07-23 13:39:16      阅读:369      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   os   io   2014   

在JVM中有一些常用的MBeans,可以写个代码获取到:

public class Test {
    public static void main(String[] args) throws Exception {
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        Set instances = server.queryMBeans(null, null);
        Iterator iterator = instances.iterator();
        while (iterator.hasNext()) {
            ObjectInstance instance = (ObjectInstance) iterator.next();
            System.out.println("MBean Found:");
            System.out.println("Class Name:\t" + instance.getClassName());
            System.out.println("Object Name:\t" + instance.getObjectName());
            System.out.println("****************************************");
        }
    }
}

根据列表,我们就能通过MBean来获取想要的信息了,比如获取Code Cache的大小:

public class TestMBean {
    final static String pid               = "6228";
    final static String CONNECTOR_ADDRESS = "com.sun.management.jmxremote.localConnectorAddress";

    public static void main(String[] args) throws Exception {
        VirtualMachine vm = VirtualMachine.attach(pid);
        JMXConnector connector = null;
        String connectorAddress = vm.getAgentProperties().getProperty(CONNECTOR_ADDRESS);

        String agent = vm.getSystemProperties().getProperty("java.home") + File.separator + "lib" + File.separator
                + "management-agent.jar";
        vm.loadAgent(agent);

        connectorAddress = vm.getAgentProperties().getProperty(CONNECTOR_ADDRESS);
        JMXServiceURL url = new JMXServiceURL(connectorAddress);
        connector = JMXConnectorFactory.connect(url);
        MBeanServerConnection mbeanConn = connector.getMBeanServerConnection();
        ObjectName name = new ObjectName("java.lang:type=MemoryPool,name=Code Cache");
        System.out.println(mbeanConn.getAttribute(name, "Usage"));

        if (connector != null) {
            connector.close();
        }
        vm.detach();
    }
}

实际上通过ObjectName("java.lang:type=MemoryPool,name=Code Cache")得到的类为:

sun.management.MemoryPoolImpl

而在getAttribute(name, "Usage")的时候对应调用的方法为:

public java.lang.management.MemoryUsage getUsage(){}
其他MBean的用法和这个类似。

















[Java]JMX,布布扣,bubuko.com

[Java]JMX

标签:style   blog   java   os   io   2014   

原文地址:http://blog.csdn.net/wszt_gzt/article/details/36976955

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!