做过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的描述信息,看不到它的属性、方法:
相关推荐
tomcat开启远程jmx连接方式包括tomcat5 6 7 windows版本开启远程jmx连接监控
jmx 实例 rmi mbean,采用rmi方式进行jmx的mbean管理,通过这个实例能够了解jmx的应用
Monitoring Apache Tomcat with JMX 监控 tomcat 使用JMX英文原版PDF文件
当你想深入学习jvm的时候,肯定会用到。用于使用jvisualvm.exe远程监控服务器jvm
tomcat-catalina-jmx-remote-9.0.5 tomcat-catalina-jmx-remote-9.0.5.jar
主要介绍了Tomcat开启JMX服务方法的相关内容,小编觉得挺不错的,在这里给大家分享一下,需要的朋友可以参考。
Java分布式应用学习笔记09JMX-MBean的介绍
jmx 监控 tomcat 的设置方法,实现
本文档主要介绍了jmx连接T远程监控tomcat的详细配置,文档包含了一些配置的详细图片和需要注意的内容
JMX 1.2.1 Reference Implementation(重点) Include com.sun.jdmk.comm.HtmlAdaptorServer class http://www.sun.com/software/jdmk/ Downloads, sun-jdmk-runtime-5.1-b34.2.zip/SUNWjdmk/5.1/lib/jdmkrt.jar
NULL 博文链接:https://jasonhan-sh-hotmail-com.iteye.com/blog/1171904
环境准备我们这里就不直接演示了,直接配置tomcat的jmx 1、进入到tomcat的bin目录下 # cd /opt/tomcat/apache-tomcat-8.0.48/bin/ 2、编辑配置文件 # vim catalina.sh 3、在下图中上面添加参数 参数...
catalina-jmx-remote.jar放到tomcat/lib目录下 如果是windows版本,编辑TOMCAT_HOME/bin/catalina.bat,在开头加入下面几行: set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST set CATALINA...
配合zabbix 通过命令行获取tocmat资源,java -jar zabbix-java-gateway-2.4.5.jar 可以获取帮助信息
tomcat 的jmx 支持jar包,用于支持tomcat的jmx功能。
java项目,自己做的项目利用jmx监控weblogic,tomcat,websphere源码
tomcat和weblogic的jmx开通方式。。
JMX是指Java管理扩展,通过jmx可以监控java应用服务器的各项性能指标,jvm的性能指标等
云服务上的tomcat监控使用到的jar包,需要的可以直接下载,注意tomcat的版本需要和jar包的版本对应
tomcat7监控jar包,catalina-jmx-remote java-visualVM专用