`
yangyangmyself
  • 浏览: 233802 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JMX监控(MBean)

    博客分类:
  • Java
阅读更多
一、引言 写道
随着企业 IT 规模的不断增长,IT 资源(IT resource)数量不断增加,IT 资源的分布也越来越分散。可以想象,甚至对于一家只有几百台 PC 公司的 IT 管理人员来说,分发一个安全补丁并且保证其在每台 PC 上的安装,如果只依赖人工来完成那简直就是一场噩梦。这样,IT 管理系统就应运而生。
JMX可以监控与管理系统资源,一般小公司不注重IT资源监控,而大公司非常得视。目前JSE支持JMX接口规范,如Tomcat源码采用大量JMX Mbean监控资源。

 

写道
MX 使用了 Java Bean 模式来传递信息。一般说来,JMX 使用有名的 MBean,其内部包含了数据信息,这些信息可能是:应用程序配置信息、模块信息、系统信息、统计信息等。另外,MBean 也可以设立可读写的属性、直接操作某些函数甚至启动 MBean 可发送的 notification 等。
JMX 规范可以分为三层: 设备层, 代理层, 分布式服务层。 设备层规范定义了编写可由 JMX 管理的资源的标准,即如何写 MBean; 代理曾规范定义了创建代理的规范,封装了 MBean Server;分布式服务层主要定义了对代理层进行操作的管理接口和构件。
javax.management.MBeanServer实现了 Agent 的功能,以标准的方式给出了管理系统访问 JMX 框架的接口。而 javax.management.MBeans实现了以标准的方式给出了 JMX 框架访问资源的接口。而从类库的层次上看,JMX 包括了核心类库 java.lang.management和 javax.management包。java.lang.management包提供了基本的 VM 监控功能,而 javax.management包则向用户提供了扩展功能。



 

写道
要使一个 Java 对象可管理,则必须创建相应的 MBean 对象,并通过这些 MBean 对象管理相应的 Java 对象。当拥有 MBean 类后,需要将其实例化并注册到 MBeanServer 上。
一共有四种类型的 MBean , 分别是标准类型 MBean, 动态类型 MBean, 开放类型 MBean 和模型类型 MBean
1)标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口;——在前一篇中的Hello、HelloMBean就是一个标准MBeans(Standard MBeans)
2)动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活;
3)开放MBeans(Open MBeans)属于动态MBeans,这类MBean依靠基础数据类型来实现通用管理,并为友情用户进行自我声明;
4)模型MBeans(Model MBeans)同样也是动态MBeans,这类MBeans是完全可配置的,在运行期间进行自我声明;它们为资源动态工具提供一个一般性的,有默认行为的MBeans类。

   

了解一下ObjectName对象 写道
domain(域)下的一些属性,属性的存储采取key-value的方式来存储,这个类的一个精华所在就是domian及属性(key或者value)都是支持正则的,比如:*表示匹配所有,?表示匹配一个字符。
格式如下:
domain: key1 = value1 , key2 = value2
一般实例化ObjectName都传入域(domain),key,value
1) ObjectName.getInstance("domain:key1=value1")
2) ObjectName.getInstance("domain", "key1", "value1")
3) ObjectName.getInstance("domain", hashtable)
也可以直接调用构造法实例化,如 ObjectName objectName = new ObjectName("domain:key1=value1")
下面将Mbean注到MBeanServer需要用到ObjectName,所以提前了解一下。

 

public static ObjectName getInstance(ObjectName name)
	    throws NullPointerException {
	if (name.getClass().equals(ObjectName.class))
	    return name;
	try {
	    return new ObjectName(name.getSerializedNameString());
	} catch (MalformedObjectNameException e) {
	    throw new IllegalArgumentException("Unexpected: " + e);
	    // can't happen
	}
    }
  public static ObjectName getInstance(String domain,
					 Hashtable<String,String> table)
	throws MalformedObjectNameException, NullPointerException {
        return new ObjectName(domain, table);
    } 

public ObjectName(String domain, String key, String value)
	throws MalformedObjectNameException, NullPointerException {
	// If key or value are null a NullPointerException
	// will be thrown by the put method in Hashtable.
	//
	Map<String,String> table = Collections.singletonMap(key, value);
	construct(domain, table);
 }

 

二、MBean 类型 写道
依次描述MBean各种类型标准MBeans、动态MBeans、模型MBeans

 

2.1 标准 MBean 写道
标准 MBean 是最简单的一类 MBean,与动态 Bean 不同,它并不实现 javax.management包中的特殊的接口。说它是标准 MBean, 是因为其向外部公开其接口的方法和普通的 Java Bean 相同,是通过 lexical,或者说 coding convention 进行的,代码实现如下:

 

/**
* 与普通接口定义一样
*/
public interface HelloMBean { 
    public void sayHello(); 
    public int add(int x, int y);  
    public String getName();     
    public int getCacheSize(); 
    public void setCacheSize(int size); 
} 

 

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; 
}

 

public class ITAgentMain { 
 
    public static void main(String[] args) throws Exception { 
        // MBeanServer对象获取
        // 或采用MBeanServerFactory.createMBeanServer()获取MBeanServer对象
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
        // 构建ObjectName
        ObjectName name = new ObjectName("com.example:type=Hello"); 
        Hello mbean = new HelloMBean (); 
        // 将Mbean注册到MBeanServer 
        mbs.registerMBean(mbean, name); 
        //创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。AdaptorServer其实也是一个MBean。  
        // alpha:name=HelloWorld的名字是有一定规则的,格式为:“域名:name=MBean名称”,域名和MBean名称都可以任意取。  
        ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082"); //     
         HtmlAdaptorServer adapter = new HtmlAdaptorServer();     
         server.registerMBean(adapter, adapterName);     
         adapter.start();     
         System.out.println("start.....");  
    } 
} 

 

JMX注册服务端口 写道
需要注册一个端口,绑定url后,客户端就可以使用rmi通过url方式来连接JMXConnectorServer,就可以远程监控资源,目很多开源软件都支持如Apache activeMQ可以用JDK 自带的jconsole监控对列、主题资源。
这里的8888(默认为1099)是通讯端口或者查找端口,服务端在createRegistry时实际上会new ServerSocket(8888),客户端的socket通过与端口号为8888的服务端端口互联lookup到server对象。客户端获取到的server对象在和服务端的sketon对象进行通讯时实际上也会建立socket连接,数据传输时的ServerSocket也需要一个端口(不同于通讯端口),称之为数据端口。

 

//JMXConnectorServer service 
		try {
			//这句话非常重要,不能缺少!注册一个端口,绑定url后,客户端就可以使用rmi通过url方式来连接JMXConnectorServer
			LocateRegistry.createRegistry(8888);
			JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8888/server");
                        // 注意:server为MBeanServer对象(Mbean注册到此对象)
			JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
			System.out.println("....................begin rmi start.....");
			cs.start();
			System.out.println("....................rmi start....."); 
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} 

 

     动态Mbeans、模型Mbeans(apache 开源实现)待续.....

  • 大小: 173.6 KB
分享到:
评论

相关推荐

    Druid数据源连接池;mybatis配置集成,多数据源;jmx监控MBean;

    Druid数据源连接池;mybatis配置集成,多数据源;jmx监控MBean;定时任务配置;aop_spring-boot-service

    spring-dubbo-service:微服务spring dubbo项目:dubbo rpc;德鲁伊数据源连接池; mybatis配置集成,多数据源; jmx监控MBean;定时任务; aop; ftp;测试;指标监控;参数验证;跨域处理; shiro权限控制; consul服务注册,发现; redis分布式锁; SPI服务机制; cat监控; netty服务代理; websocket; disconf; mongodb集成;休息; docker; fescar

    jmx监控MBean测试; ArchUnit参数验证;跨域处理; shiro权限控制;静态资源,“ /”映射服务启动注册到consul;并测试获取redis服务,初始化redis资源; consul监控redis服务; reids分布式锁;注意consul客户端和...

    jmx监控weblogic,tomcat,websphere源码

    在本项目中,"jmx监控weblogic,tomcat,websphere源码"涉及了使用JMX来监控三个主流的Java应用服务器:WebLogic、Tomcat和WebSphere。这些服务器都是企业级应用部署的常见选择,对它们的监控对于确保系统性能、稳定性...

    Java分布式应用学习笔记09JMX-MBean的介绍

    ### Java分布式应用学习笔记09JMX-MBean的介绍 #### MBean概念及作用 MBean,即Managed Bean,是在JMX(Java Management Extensions)框架中用于管理资源的一种特殊Java对象。通过MBean,可以方便地对应用程序进行...

    JMX IN ACTION(十二)

    12.1 使用JMX监控MBean属性 JMX兼容的代理提供了一组标准MBean,这些MBean构成了JMX的监控服务。由于这些监控器是以MBean的形式实现的,用户可以在运行时根据需要实例化和修改它们。监控MBean的目标是其他MBean的...

    jmx 实例 rmi mbean

    结合JMX,RMI可以使得MBean跨越网络进行管理和监控,这对于分布式系统尤其有用。 首先,理解MBean的分类至关重要。MBeans有三种主要类型:Standard MBeans、Dynamic MBeans和Open MBeans。Standard MBeans是预先...

    jmx 监控 tomcat

    JMX(Java Management Extensions)是Java平台提供的一种标准管理框架,用于监控和管理应用程序、服务、设备等。在Tomcat这样的Java应用服务器中,JMX能够让我们深入洞察服务器的运行状态,包括内存使用、线程信息、...

    使用JMX监控类的实例数量

    4. **监控MBean**:最后,你可以通过JMX客户端连接到运行中的Java应用程序,查询并监视`getInstanceCount`属性。JConsole是Java自带的一个JMX客户端,可以直接查看和操作MBeans。除此之外,还有许多第三方工具,如...

    JMX(一)-------MBean server

    总的来说,JMX和MBean Server提供了一种标准、灵活的管理方式,使得Java应用的管理和监控变得更加便捷。通过结合Spring框架,开发者可以更轻松地在应用中集成JMX功能,实现对应用的全方位管理。

    使用JMX监控Zookeeper状态Java API

    使用JMX监控Zookeeper状态Java API 在分布式系统中,Zookeeper是经常使用的分布式协调服务,用于维护和管理分布式应用程序的配置信息和状态。为了监控Zookeeper的状态,需要使用监控工具来实时监控Zookeeper的运行...

    JMX 远程服务器信息监控

    在实际应用中,可以通过编写Java代码来建立JMX客户端,连接到远程服务器的MBeanServer,然后通过MBean接口获取并处理监控数据。也可以使用工具,如JConsole、VisualVM等,它们提供了图形化的界面来直接查看和操作...

    论文研究-JMX技术在网络监控中的应用.pdf

    例如,可以使用JMX API编写代码动态地调用MBean服务器的接口来创建新的MBean,或者发送通知来启动监控中的某些特定任务。这种能力极大地增强了网络监控系统的灵活性和动态配置能力。 综上所述,JMX技术在网络监控中...

    lanlan2017#JavaReadingNotes#18.0 第18章 使用JMX监控Spring1

    第18章 使用JMX监控Spring本章内容:使用Actuator端点的MBean将Spring bean暴露为MBean发布通知JMX(Java Manage

    JMX实用例子详解(包括各种Mbean)

    通过JMX,我们可以远程监控和管理Java应用程序,包括Java虚拟机(JVM)的性能指标以及应用服务器的各种性能数据。 JMX的核心组件包括: 1. **MBeans**:MBeans是JMX中的核心元素,它们是可管理的Java对象,代表...

    jmx测试包用于检查zabbix的监控项是否正常

    这意味着可能有一个场景,用户需要确保Zabbix配置的JMX监控项能够正确地从Java应用程序中获取和报告数据。 标签"测试"表明这个压缩包包含的`cmdline-jmxclient-0.10.3.jar`可能是一个命令行工具,用于测试Zabbix与...

    JMX小例子以及介绍

    例如,你可以通过JMX监控和调整Spring应用上下文中的bean。 **5. 结论** JMX为Java开发者提供了一种强大且灵活的工具,用于管理和监控Java应用。通过理解MBean、MBean Server和连接器的工作原理,以及如何编写和...

    基于Spring+JMX+Tomcat实现资源动态管理

    3. 使用Spring的JMX支持:Spring提供了`PlatformMBeanServerBeanPostProcessor`,它可以自动检测带有MBean注解的bean并将其注册到MBean服务器。 4. 连接和管理:通过JConsole或其他JMX客户端工具,如VisualVM或JMC...

    jboss远程调用JMX

    MBean是JMX的核心,它是一个Java对象,提供了管理和监控的接口。MBeans可以是标准的,也可以是自定义的,它们暴露了管理和配置属性以及操作。在JBoss中,许多核心服务和组件都是通过MBeans来管理和配置的。 接下来...

    jmx prometheus监控指标插件

    总的来说,"jmx prometheus监控指标插件"是连接Java应用程序与Prometheus监控系统的桥梁,它使得开发者能够充分利用Prometheus的强大功能来监控和优化基于Java的应用,提升系统的稳定性和性能。正确配置和使用这个...

    jmx资料

    Java Management Extensions(JMX)是Java平台的一项重要技术,它提供了一种管理和监控Java应用程序的标准框架。JMX允许开发者创建、配置、管理以及远程监控Java应用,包括系统资源、应用程序和服务。这篇文档将深入...

Global site tag (gtag.js) - Google Analytics