JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务, 实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。主要用于对JAVA应用程序和JVM进行监控和管理。
JMX架构
JMX可分为监控层,代理层,管理层三层结构。
监控层
监控层主要通过MBean来收集管理我们所需要的监控数据。一个MBean对应一类数据。
代理层
所有的MBean都需要注册到MBServer容器中才能够被管理使用。一个JMX代理还包括一组用于管理MBeans的服务和至少一个通信适配器(adaptor)或连接器(connector) 以供管理程序访问
管理层
JMX 可以以多重方式来访问JMX技术监测信息,既可以通过现有的管理协议,比如简单网络管理协议(SNMP),也可以通过专利性的协议。MBean server依赖协议适配器(adaptors)和连接器(connectors)来让JMX代理供管理程序(位于JMX代理所在的JVM之外)访问。
每个适配器都通过一个特定的协议提供一个包含了所有注册在MBean Server中的MBeans的视图。比如,一个HTML适配器可以在一个浏览器中显示一个MBean。
JMX示例
public interface ServerResourceMBean {
public String getInnerstore();
public void setInnerstore(String innerstore) ;
public String getNetwork();
public void setNetwork(String network);
}
接口名称必须以MBean结尾
public class ServerResource implements ServerResourceMBean {
private String innerstore;
private String network;
public String getInnerstore() {
Runtime runtime=Runtime.getRuntime();
return runtime.freeMemory()+"";
}
public void setInnerstore(String innerstore) {
this.innerstore = innerstore;
}
public String getNetwork() {
Runtime runtime=Runtime.getRuntime();
return runtime.totalMemory()+"";
}
public void setNetwork(String network) {
this.network = network;
}
}
实现类的名字为去掉MBean之后的接口名,且实现类与接口必须在同一包下
public static void agent() throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InterruptedException, RemoteException {
MBeanServer mBeanServer= ManagementFactory.getPlatformMBeanServer();
ObjectName ServerResource=new ObjectName("jmxBean:name=ServerResource");
mBeanServer.registerMBean(new ServerResource(),ServerResource)