`
Tyrion
  • 浏览: 260877 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Tomcat7中的JMX使用(一)Standard MBean

阅读更多

做过Java平台下的应用服务器监控的对JMX应该不会陌生,简单说,JMX就是提供了一个标准的管理方案的框架。这里所说的管理的含义包括监控平台运行状况、应用级别配置资源、收集应用统计数据、调试、监视服务器性能,JMX 允许你将所有的资源(硬件和软件)打包成java 对象,然后将他们暴露在分布式环境中,并且JMX 提供了一个机制,可以很简单的将既存的管理协议,如SNMP ,映射到JMX 自己的管理结构中。

 

本文重点不是介绍JMX,而是分析Tomcat7中是如何用JMX来提供管理功能的,如果对JMX并不熟悉可以先Google一下,了解一下这个技术,网上已经有一些中文技术博客的介绍,如BlogJava里“子在川上曰”的《JMX一步步来》、《JMX IN ACTION》的一些翻译文章。当然,最权威的还是看看oracle的官方文档,这里提供JMX1.4规范的官方链接:http://docs.oracle.com/javase/7/docs/technotes/guides/jmx/JMX_1_4_specification.pdf

 

先来看下Tomcat7里由JMX提供的管理功能,在Tomcat启动完之后可以用jconsole来访问:


选择Tomcat启动后所属的进程,这里是我本机启动Tomcat的例子,当然也可以访问远程Tomcat。连接成功后会看到:


在MBean这一页里可以看到Tomcat提供的当前可以使用的MBean。

 

JMX标准提供了四种不同的 MBean:

Standard MBean 直接实现用于管理对象的方法,既可以通过实现一个由程序员定义的、类名以 “MBean” 结束的接口,也可以使用一个以一个类作为构造函数参数的 Standard MBean 实例,加上一个可选的接口类规范。这个接口可以开放用于管理的部分对象方法。

Dynamic MBean 用属性访问器动态地访问属性,并用一个一般化的 invoke() 方法调用方法。可用的方法是在 MBeanInfo 接口中指定的。这种方式更灵活,但是不具有像 Standard MBean 那样的类型安全性。它极大地降低了耦合性,可管理的 POJO(纯粹的老式 Java 对象)不需要实现特定的接口。

Model MBean 提供了一个改进的抽象层,并扩展了 Dynamic MBean 模型以进一步减少对给定实现的依赖性。这对于可能使用多个版本的 JVM 或者需要用松散耦合管理第三方类的情况会有帮助。Dynamic MBean 与 Model MBean 之间的主要区别是,在 Model MBean 中有额外的元数据。

Open MBean 是受限的 Model MBean,它限制类型为固定的一组类型,以得到最大的可移植性。通过限制数据类型,可以使用更多的适配器,并且像 SMTP 这样的技术可以更容易适应 Java 应用程序的管理。这种变体还指定了数组和表等标准结构以改进复合对象的管理。

 

在Tomcat7中可以看到标准MBean(Standard MBean)和动态MBean(Dynamic MBean)的使用,本文就介绍这两种MBean。先来看下比较简单的标准MBean:

 

在Tomcat的启动类org.apache.catalina.startup.Bootstrap的createClassLoader方法最后一部分:

        ClassLoader classLoader = ClassLoaderFactory.createClassLoader
            (repositories, parent);

        // Retrieving MBean server
        MBeanServer mBeanServer = null;
        if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
            mBeanServer = MBeanServerFactory.findMBeanServer(null).get(0);
        } else {
            mBeanServer = ManagementFactory.getPlatformMBeanServer();
        }

        // Register the server classloader
        ObjectName objectName =
            new ObjectName("Catalina:type=ServerClassLoader,name=" + name);
        mBeanServer.registerMBean(classLoader, objectName);

从ClassLoaderFactory.createClassLoader方法的最后一部分实现代码:

        return AccessController.doPrivileged(
                new PrivilegedAction<StandardClassLoader>() {
                    @Override
                    public StandardClassLoader run() {
                        if (parent == null)
                            return new StandardClassLoader(array);
                        else
                            return new StandardClassLoader(array, parent);
                    }
                });

可以看出上面的classLoader对象实际是org.apache.catalina.loader.StandardClassLoader类的实例。看这个类的定义:

public class StandardClassLoader
    extends URLClassLoader
    implements StandardClassLoaderMBean 

它实现了一个StandardClassLoaderMBean接口。从这里就可以看出最上面的代码mBeanServer.registerMBean中注册的实际上就是一个Standard MBean。只是这个标准MBean很没意思,一个方法都没开放出去管理,所以jconsole里只能看到MBean的描述信息,看不到它的属性、方法:

0
0
分享到:
评论

相关推荐

    《jmx技术介绍》配套源代码

    这些例子可以帮助读者快速上手,理解如何创建、注册MBeans,如何通过MBean Server进行操作,以及如何设置和使用JMX连接器。通过实践,学习者可以更深入地掌握JMX的精髓。 总结来说,JMX是Java平台的重要管理工具,...

    JMX、MXBean学习

    MXBean是JMX中的一个特殊概念,它是标准MBean的扩展,旨在简化跨JVM边界传递数据的过程。MXBean接口定义了特定的命名规则和序列化机制,确保数据能够在不同的Java环境中安全地传输。MXBean的使用通常涉及到JConsole...

    jmx简单实例,附带jar包完整项目

    在这个“jmx简单实例”中,我们将会探讨JMX的基本概念,以及如何使用所提供的jar包来构建和运行一个简单的JMX示例。 1. **JMX基础** JMX由三部分组成:MBeans(Managed Beans)、Servers和Agents。MBeans代表管理...

    JAVA JMX 学习资料

    在应用服务器如Tomcat、JBoss中,JMX也被用来管理服务器配置和组件。 8. **Spring对JMX的支持**: Spring框架提供对JMX的全面支持,可以方便地注册MBeans,以及集成Spring的管理功能。 9. **安全性**: JMX支持...

    JMX in Action

    JMX允许开发者创建可管理和监控的MBeans(Managed Beans),这些MBeans代表了系统中的各种资源或服务,如内存使用、线程状态、网络连接等。通过MBeans,开发者可以暴露系统状态,并提供操作接口来调整配置或执行管理...

    java of core jmx

    7. **JMX与Spring的集成**:Spring框架提供了与JMX的集成,可以方便地将Spring Bean注册为MBeans,简化了JMX的使用。 8. **安全性**:JMX支持安全管理,可以通过设置权限来控制哪些客户端可以访问特定的MBeans,...

    JMXTools.jar和jmxri.jar下载

    在Java应用程序中,当你需要在运行时使用JMX服务,比如注册MBeans(Managed Beans),监听MBean属性变化或执行管理操作时,就需要包含`jmxri.jar`。 `jmxtools-1.2.1.jar`则是JMX工具集,提供了许多实用工具和API,...

    JMX入门教程 程序管理功能的框架

    JMX(Java Management Extensions)是一种用于在Java应用程序中实现管理和监控功能的框架。它允许开发者创建可管理的组件,即MBeans(Managed Beans),并通过MBeanServer进行交互。JMX提供了一种标准的方式来暴露...

    JMX学习资料

    例如,Tomcat、Jetty等Web服务器,以及Hadoop、Apache Kafka等大数据组件都使用JMX来提供管理功能。 9. **JMX工具**:Java自带了一些JMX工具,如jconsole和jvisualvm,它们可以帮助开发者直观地查看和管理MBeans。...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    第2章 一个简单的servlet容器 7 2.1 简述 7 2.2 javax.servlet.Servlet接口 7 2.3 Application 1 7 2.3.1 HttpServer1类 8 2.3.2 Request类 8 2.3.3 Response类 9 2.3.4 StaticResourceProcessor类 9 2.3.5 ...

    JavaEE主要技术

    Servlet 的优势在于它可以被部署在任何支持 Servlet 规范的容器中运行,例如 Tomcat、WebLogic 或 GlassFish。 - **初始化**:当 Servlet 第一次被加载时,容器会调用 `init()` 方法进行初始化。 - **服务**:每当...

    spring-boot-reference.pdf

    52.1. Customizing MBean Names 52.2. Disabling JMX Endpoints 52.3. Using Jolokia for JMX over HTTP 52.3.1. Customizing Jolokia 52.3.2. Disabling Jolokia 53. Loggers 53.1. Configure a Logger 54. Metrics...

Global site tag (gtag.js) - Google Analytics