接触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为一个应用程序,设备,系统等植入监控和管理功能。