一、引言 写道
随着企业 IT 规模的不断增长,IT 资源(IT resource)数量不断增加,IT 资源的分布也越来越分散。可以想象,甚至对于一家只有几百台 PC 公司的 IT 管理人员来说,分发一个安全补丁并且保证其在每台 PC 上的安装,如果只依赖人工来完成那简直就是一场噩梦。这样,IT 管理系统就应运而生。
JMX可以监控与管理系统资源,一般小公司不注重IT资源监控,而大公司非常得视。目前JSE支持JMX接口规范,如Tomcat源码采用大量JMX Mbean监控资源。
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包则向用户提供了扩展功能。
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类。
一共有四种类型的 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,所以提前了解一下。
格式如下:
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 开源实现)待续.....
相关推荐
jmx监控MBean测试; ArchUnit参数验证;跨域处理; shiro权限控制;静态资源,“ /”映射服务启动注册到consul;并测试获取redis服务,初始化redis资源; consul监控redis服务; reids分布式锁;注意consul客户端和...
第18章 使用JMX监控Spring本章内容:使用Actuator端点的MBean将Spring bean暴露为MBean发布通知JMX(Java Manage
JMX是指Java管理扩展,通过jmx可以监控java应用服务器的各项性能指标,jvm的性能指标等
分析了当前网络监控中面临的主要问题,提出了采用JMX方案来解决的办法。介绍了JMX的技术特点,并采用该技术实现了IP网络管理中的网络监控任务的调配和管理。
指标的实时监控在网络流量、系统开销、对新设备的监控等方面存在很多问题,JMX技术是解决这些问题的有效方法。因此提出了一种利用JMX技术来改进网络管理系统中实时监控管理的一个实现模型。此模型有效地解决了实时...
通过统一的图形化管理控制台,您可以管理和监控网络、操作系统、数据库等基础设施服务,也可以管理和监控Java虚拟机、JBoss Web、连接池等中间件,还可以通过自定义的JMX MBean管理和监控您的业务应用。通过对配置...
目前实时给出一些监控统计,后续会更新更多功能特征目前可以使用以下功能: JVM 监控统计服务器线程池运行时统计服务器统计JDBC 数据源统计信息应用程序部署列表和状态世贸中心现状概念WeblogicJMX 使用 Java JMX ...
在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。 Agent 用来管理相应的资源,并且为远端用户提供访问的接口。该层的核心是MBeanServer,...
现在,与J2EE兼容的应用服务器需要支持这个标准,因为其中一些服务器使用JMXMBean作为基础架构。设计模式自从开始引入以来就一直很受欢迎,现在,我们还可以把这些设计理念用于应用程序的易管理性设计中。为了使应用...
JDK1.5提供JMX remote的管理工具Jconsole,可以监控Java运行程序的内存使用情况、活动线程数量、类装载的数量、MBeans的状态、虚拟机的各种信息等,还可以执行MBean公开的方法或强制进行垃圾回收。只要应用服务器...
Jolokia是一种远程访问JMX MBean的新方法。 它与JSR-160连接器的不同之处在于它是一种基于代理的方法,该方法使用REST风格的HTTP上的JSON进行通信。 为不同的环境提供了多个代理: 用于在Java EE Server中作为Web...
JConsole能够提供被监控虚拟机的内存、线程、类的加载以及MBean等信息,从而能够对服务器的运行情况进行实时监控。 其实在 JDK 5 中已经新加入了这个功能了. 现在的 JDK 已经内置了对 VM 的监控功能. JDK 6 中这个...
Jmx监控器根据Neo4j进行JavaApplication客户端JMX测试。 在MBeanServer上进行监控的Neo4j骨干协议。 Tramite connettore RMI,从客户端到JMX全部的MBeanServer,从代理到控制台的所有MBean的恢复,以及从控制台到val...
与 SNMP 和其他管理标准一样,JMX 是一个公共规范,许多常用监控产品的供应商都支持它。 WebLogic Server 提供了一组 MBean,可用于通过 JMX 配置、监视和管理 WebLogic Server 资源。 Ruby 版本 - 仅在 JRuby ...
Pivotal GemFireXD*Web GemFireXD*Web 是新的基于浏览器的数据库架构管理工具,可用于 Pivotal GemFireXD,它允许用户查看/更改...AUTHENTICATION 时授予表/程序单元权限JMX Mbean 监控以 CSV 或 JSON 格式保存查询结果
librato-metrics-taps 弃用通知 ... JMX Beans tap 脚本将连接到 JMX 服务并从一组已配置的 MBean 中提取监视属性。 这些 MBean 属性的值被注入到 Librato 的指标服务中。 librato-metrics-tap-jmxbeans
基于JMX的监控和管理 xiv. 35. 测试 Spring Boot参考指南 4 i. 35.1. 测试作用域依赖 ii. 35.2. 测试Spring应用 iii. 35.3. 测试Spring Boot应用 i. 35.3.1. 使用Spock测试Spring Boot应用 iv. 35.4. 测试工具 i. ...