干货

JMX

2017-07-17  本文已影响334人  0d1b415a365b

简介

全称Java Management Extensions,从Java5.0开始引入到标准Java技术平台中。JMX提供了一个标准的方法去管理资源,因为JMX是一种动态技术,你可以在被管理资源创建、实例化和实现的时候监控和管理他们。你也可以使用JMX技术去监听和管理Java虚拟机。

Why JMX

JMX几乎可以在任何支持Java的设备上运行,而且只需要嵌入一个管理对象服务器(MBean Server),使它的一些功能作为一个或几个被管理的bean(MBean)在目标服务器上注册。然后就可以从管理基础设施中受益。

标准Java平台都支持JMX架构,因此只要符合JMX规范都可以通过JMX管理。

使Java应用可以远程管理。

JMX架构

JMX架构 JMX架构

基本术语

要管理的资源。使用Java Bean描述要管理的资源。这些Java Bean叫MBean(Management Bean)。

代理层。主要定义了各种服务以及通信模型,和需要被管理的资源在同一机器上,核心模块是MBean Server,所有的MBean都要向它注册,才能被管理。注册在MBeanServer上的MBean并不直接和远程应用程序进行通信,他们通过协议适配器(Adapter)和连接器(Connector)进行通信。

也叫Remote Management Layer. 即远程管理层。MBean Server依赖于该层的协议适配器(Adaptor)和连接器(Connector),让JMX Agent可以被该JVM外面的管理系统远程访问。支持多种协议:SNMP,HTML,RMI.

MBean分类

MBean在JDK中的应用

java.lang.management
平台资源 对应的 MXBean 可使用的数量
缓冲池 BufferPoolMXBean 1个或多个
类装入系统 ClassLoadingMXBean 1个
编译系统 CompilationMXBean 1个
VM HotSpotDiagnosticMXBean 垃圾收集系统 GarbageCollectorMXBean 至少 1
内存管理器 MemoryManagerMXBean 1个或多个
内存 MemoryMXBean 1个
内存资源 MemoryPoolMXBean 1个
操作系统 OperatingSystemMXBean 1个
logging PlatformLoggingMXBean 1个
运行时系统 RuntimeMXBean 1个
系统资源压力 SystemResourcePressureMXBean
线程 ThreadMXBean 1个

JDK中提供的这些MBean可以通过ManagementFactory获取实例。

MBean规范

Standard MBean

package com.example; 
public interface HelloMBean { 
 
    public void sayHello(); 
    public int add(int x, int y); 
    
    public String getName(); 
     
    public int getCacheSize(); 
    public void setCacheSize(int size); 
} 
package com.example; 
public class Hello implements HelloMBean { 
    public void sayHello() { 
        System.out.println("hello, world"); 
    } 
     
    public int add(int x, int y) { 
        return x + y; 
    } 
     
    public String getName() { 
        return this.name; 
    }  
     
    public int getCacheSize() { 
        return this.cacheSize; 
    } 
     
    public synchronized void setCacheSize(int size) {
        this.cacheSize = size; 
        System.out.println("Cache size now " + this.cacheSize); 
    } 

    private final String name = "Reginald"; 
    private int cacheSize = DEFAULT_CACHE_SIZE; 
    private static final int 
        DEFAULT_CACHE_SIZE = 200; 
}

MXBean

Dynamic MBean

public interface DynamicMBean {

public Object getAttribute(String attribute) throws AttributeNotFoundException,
    MBeanException, ReflectionException;

public void setAttribute(Attribute attribute) throws AttributeNotFoundException,
    InvalidAttributeValueException, MBeanException, ReflectionException ;

public AttributeList getAttributes(String[] attributes);

public AttributeList setAttributes(AttributeList attributes);

public Object invoke(String actionName, Object params[], String signature[])
    throws MBeanException, ReflectionException ;

public MBeanInfo getMBeanInfo();

}

  * MBeanInfo描述管理接口
  * Attribute的getter和setter提供通用属性设置,定义对外暴露的属性
  * invoke提供通用操作,定义对外暴露的操作
* 注意:
    * Dynamic的意思是管理接口在运行时才会真正的显现出来,不用通过事先静态的接口定义。而不是指可以动态的调整管理接口。
    * MBean的描述应该是不会改变的,所以一般要在动态MBean的构造函数里来构建MBeanInfo。

## Module MBean
* Module MBean是动态MBean的一种实现,所以它的接口、属性、操作也是通过编程方式来定义。
* JMX规范规定该类必须实现为javax.management.modelmbean.RequiredModelMBean,管理者要做的就是实例化该类,并配置该构件的默认行为并注册到JMX代理中,即可实现对资源的管理。RequiredModelMBean是一个没有任何管理接口的动态MBean,但是它可以把MBeanInfo跟一个目标对象组合起来。
* 目标对象是具体实现管理行为的类。通过ModelMBean接口的setManagedResource()可以将ModelMBean和目标对象进行关联。

  ```java
public void setManagedResource(Object managedResource, String managedResourceType) ;
RequiredModelMBean.png

Open MBean

Notifications

Agent

Remote Management

远程接口的暴露

ObjectName adapterName = new ObjectName("MyMBean:name=htmladapter,port=8082");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
server.registerMBean(adapter, adapterName);
adapter.start();
LocateRegistry.createRegistry(8888);
// 必须service:jmx:开头
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8888/server");
JMXConnectorServer jcs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
jcs.start();

远程客户端

项目中的应用

Spring JMX

http://blog.csdn.net/yaerfeng/article/details/28232435

log4j JMX

http://logging.apache.org/log4j/2.x/manual/jmx.html

Tomcat JMX

http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html

参考

上一篇 下一篇

猜你喜欢

热点阅读