[Java]JMX

在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的使用方法和这个类似。

---------- ---------- ---------- ---------- ----------风格线---------- ---------- ---------- ---------- ----------

假设系统的MBean不能满足须要,那么我们能够自定义MBean,比方标准的MBean例如以下:

// 标准的MBean有几个限制:1、必须实现接口 2、必须有public类型的构造函数 3、命名规则
public class My implements MyMBean {
    public String getHello() {
        return "hello world";
    }
}
public interface MyMBean {
    public String getHello();
}

接下来能够将这个MBean增加MBeanServer:

public class Test {
    public static final void main(String[] args) throws Exception {
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        ObjectName objectName = new ObjectName("com.wszt:type=MyMBean");
        mBeanServer.createMBean("My", objectName);
    }
}

attach&用法和上面的一样,不赘述。除了标准的MBean还有Dynamic MBean、Model Bean、Open MBean,用法类似。

---------- ---------- ---------- ---------- ----------风格线---------- ---------- ---------- ---------- ----------

简单来看JMX是一个JVM的管理框架,MBean是对资源的封装,然后后AGENT来进行包装,最后有接口对外提供以方便使用,看下图:

时间: 2024-08-26 02:01:34

[Java]JMX的相关文章

java之JMX

java之JMX 有关JMX的定义和架构就不详解了,见百度百科: http://baike.baidu.com/link?url=6QzGGEqphTmpft3ll5mXmDNVRdvLRZhkvGaqAWyO6EliwrHeIwt5bdMd188iMlzylxoxr7gRbtIWn2NQODBLZa 代码实例: 与创建一个普通的bean没什么区别: package com.doctor.java.jmx; /** * @author sdcuike * * @time 2016年2月9日 下午

JVM Monitoring: JMX or SNMP?

JVM Monitoring: JMX or SNMP? By daniel on Feb 23, 2007 Since JavaTM SE 5.0, the JRE provides a means to manage and monitor the Java Virtual Machine. It comes in two flavors: one is based on the Java Management Extension (JMXTM), the other is a small

使用jmx监控tomcat

1.在tomcat启动过程中,开启相应的参数配置: 1 2 3 4 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 其中: com.sun.management.jmxremote.port 是jmx端口 这个很重要 在使

Zabbix-(六) JMX监控

Zabbix-(六) JMX监控 一.前言 Zabbix提供了JMX监控,它通过JMX API获取JVM信息,从而提供监控数据.本文讲述使用JMX监控Tomcat的JVM信息. 准备 Zabbix Server 4.4 (ip: 192.168.152.140) 运行Java应用的主机 以下简称Server-A (已被Zabbix监控) (ip:192.168.152.142) 二.安装Zabbix-Java-gateway Zabbix Server通过Zabbix Java gateway收

Tomcat7.0源码分析——生命周期管理

前言 从server.xml文件解析出来的各个对象都是容器,比如:Server.Service.Connector等.这些容器都具有新建.初始化完成.启动.停止.失败.销毁等状态.tomcat的实现提供了对这些容器的生命周期管理,本文将通过对Tomcat7.0的源码阅读,深入剖析这一过程. Tomcat生命周期类接口设计 我们先阅读图1,从中了解Tomcat涉及生命周期管理的主要类. 图1 Tomcat生命周期类接口设计 这里对图1中涉及的主要类作个简单介绍: Lifecycle:定义了容器生命

Terracotta tc-config.xml配置说明(这个真的是转的)

<?xml version="1.0" encoding="UTF-8" ?><!--All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved. --><!--  tc-config-reference.xml  This is a sample Terracotta configuration file. In it,

Zabbix 3.0 生产案例 [四]

Zabbix 3.0 生产案例 [四] zabbix 时间:2016年9月22日 笔者QQ:381493251 Abcdocker交流群:454666672 如果遇到什么问题可以进群询问,我们是一个乐于帮助的集体! Zabbix 生产案例实战 一.项目规划 1.主机分组: 交换机 Nginx Tomcat MySQL 2.监控对象识别: 1.使用SNMP监控交换机 2.使用IPMI监控服务器硬件 3.使用Agent监控服务器 4.使用JMX监控Java应用 5.监控MySQL 6.监控Web状态

zabbix监控多个tomcat实例--自动发现

参考:http://www.iyunv.com/thread-227674-1-1.html 1.上传 catalina-jmx-remote.jar, cmdline-jmxclient-0.10.3.jar, jmx_discovery.sh 和 add_service_tomcat.sh 到 /tmp/目录下 2.给 add_service_tomcat.sh 赋执行权限,并执行 执行完这个脚本之后,需要重启你的tomcat服务,和zabbix_agentd的服务 3  cat  add_

使用JCONSOLE远程监控JVM

启动JMS服务 JConsole是从Java 5中开始引入的一个用于对JVM性能和资源消耗进行监控的图形化工具.JConsole可以连接本地的Java程序,也可以连接远程的Java程序.由于是GUI的方式使用,所以就不细说那些基本的使用方法了,这里只是记录一下试用过程中遇到的几个小问题及其解决方案. 1. 要实现让JConsole可以远程连接到某个Java程序,则需要在Java程序启动的JAVA_OPTION中添加选项"com.sun.management.jmxremote.port=8888