JMX及其Tomcat中应用整理

    接触JMX已经很久了,但是一直感觉比较模糊,然后在读Tomcat内核分析时,再次遇到,因此思考下,整理下来。

    JMX(Java Manager Extension),类似JMS,是一个Java管理体系的规范标准,主要负责系统管理和监控,基于此规范扩展的系统具有管理监控的功能,可以动态监控和修改内存中变量。利用在Tomcat中,可以监控和管理服务器性能,JVM参数,WEB连接数,线程池,数据库连接池,配置文件重新啊加载等并且提供了远程友好的可视化管理等,并且,实时性高,同时为分布式系统管理提供一个基础框架和丰富的管理手段。

   JMX体系结构三个层次,设备层,代理层 ,分布服务层,以下分别简述

1 设备层(Instrumentation Level),定义了信息模型,定义了实现JMX管理的资源,管理构件(MBean),可以使java应用,服务,一个设备。

2 代理层(Agent Level),定义了各种服务以及通信模型,核心是MBean服务器,所有管理构件向它注册。

3 分布服务层(Distributed Service Level)。负责使JMX代理对外界可用,定义了能够对代理层进行操作的管理接口和构件,具体内容依靠适配器实现,这样外部管理者就可以操作代理。

下面开始展示一个JMX的用途

1 定义一个MBean接口

public interface TomcatUtilMBean {
    void setServerName(String serverName);

    String getServerName();

    void setPort(int port);

    int getPort();

    String getTomcatInfo();
}

2 定义一个Mean实现类

public class TomcatUtil implements TomcatUtilMBean {
    private String serverName = "Catalina";
    private int port = 8080;

    @Override
    public String getServerName() {
        return serverName;
    }

    @Override
    public void setServerName(String serverName) {
        this.serverName = serverName;
    }

    @Override
    public int getPort() {
        return port;
    }

    @Override
    public void setPort(int port) {
        this.port = port;
    }

    @Override
    public String getTomcatInfo() {
        return "The Tomcat's name is " + serverName + ",port is " + port;
    }
}

3 注册Mean并启动JMX服务

public class TomcatMonitor {
    public static void main(String args[]) throws Exception {
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        TomcatUtilMBean tomcatUtil = new TomcatUtil();
        mBeanServer.registerMBean(tomcatUtil, new ObjectName("myBean:name=tomcatUtil"));
        while (true) {
            Thread.sleep(1000);
        }
    }
}

    启动TomcatMonitor类,用Jconsole控制台Mean模块下的myBean就能看到tomcatUtil的属性和方式,可以查看属性的值,并且可以运行方法,实现动态对应用的监控和管理。

以上演示了用JMX为一个应用程序,设备,系统等植入监控和管理功能。

猜你喜欢

转载自blog.csdn.net/qq_21190979/article/details/80783694