zoukankan      html  css  js  c++  java
  • 【Java】JMX入门

    一、JMX介绍

      JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

    1、简介

      JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等

      优点是可以非常容易的使应用程序被管理

      伸缩性的架构使每个JMX Agent服务可以很容易的放入到Agent中,每个JMX的实现都提供几个核心的Agent服务,你也可以自己编写服务,服务可以很容易的部署,取消部署。

      主要作用是提供接口,允许有不同的实现

    2、分层

      JMX体系结构分为以下四个层次:

      

      

    设备层

      设备层(Instrumentation Level):主要定义了信息模型。在JMX中,各种管理对象以管理构件的形式存在,需要管理时,向MBean服务器进行注册。该层还定义了通知机制以及一些辅助元数据类。

    代理层

      代理层(Agent Level):主要定义了各种服务以及通信模型。该层的核心是一个MBean服务器,所有的管理构件都需要向它注册,才能被管理。注册在MBean服务器上管理构件并不直接和远程应用程序进行通信,它们通过协议适配器和连接器进行通信。而协议适配器和连接器也以管理构件的形式向MBean服务器注册才能提供相应的服务。

      包含JMX Agent以及它们包含的MBean Servers。Agent layer的主要组件是MBean server,作为JMX Agents的核心,它充当MBeans的注册中心。该层提供了4个Agent 服务来使对MBean的管理更容易:计时器(Timer)、监控(monitoring)、动态加载MBean(dynamic MBean loading )、关系服务(relationship services )

    分布服务层

      分布服务层(Distributed Service Level):主要定义了能对代理层进行操作的管理接口和构件,这样管理者就可以操作代理。然而,当前的JMX规范并没有给出这一层的具体规范。

    附加管理协议API

      定义的API主要用来支持当前已经存在的网络管理协议,如SNMP、TMN、CIM/WBEM等。

    3、其他概念

    MBean:是Managed Bean的简称。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的资源的状态和操纵MBean的行为。事实上,MBean就是一个Java Object,同JavaBean模型一样,外界使用自醒和反射来获取Object的值和调用Object的方法,只是MBean更为复杂和高级一些。 

    MBeanServer:MBean生存在一个MBeanServer中。MBeanServer管理这些MBean,并且代理外界对它们的访问。并且MBeanServer提供了一种注册机制,是的外界可以通过名字来得到相应的MBean实例。 

    JMX Agent:Agent只是一个Java进程,它包括这个MBeanServer和一系列附加的MbeanService。当然这些Service也是通过MBean的形式来发布。 

    Protocol Adapters and Connectors 
      JMX Agent通过各种各样的Adapter和Connector来与外界(JVM之外)进行通信。同样外界(JVM之外)也必须通过某个Adapter和Connector来向JMX Agent发送管理或控制请求。 
    Adapter和Connector的区别在于:Adapter是使用某种Internet协议来与JMX Agent获得联系,Agent端会有一个对象(Adapter)来处理有关协议的细节。比如SNMP Adapter和HTTP Adapter。而Connector则是使用类似RPC的方式来访问Agent,在Agent端和客户端都必须有这样一个对象来处理相应的请求与应答。比如RMI Connector。 
    JMX Agent可以带有任意多个Adapter,因此可以使用多种不同的方式访问Agent。 

    二、JMX使用

    1、建立一个MBean接口和实现类

      HelloMBean.java:

    1 public interface HelloMBean {
    2     // management attributes
    3     public String getName();
    4 
    5     public void setName(String name);
    6 
    7     // management operations
    8     public void print();
    9 }

      实现类Hello.java:

     1 public class Hello implements HelloMBean {
     2     private String name = "";
     3 
     4     public String getName() {
     5         return name;
     6     }
     7 
     8     public void setName(String name) {
     9         this.name = name;
    10     }
    11 
    12     public void print() {
    13         System.out.println("Hello, " + name + "!!");
    14     }
    15 }

    2、创建MBeanServer

     1 public class HelloAgent  {
     2     private MBeanServer server;
     3 
     4     public HelloAgent() {
     5 
     6         // CREATE the MBeanServer
     7         System.out.println("
    	CREATE the MBeanServer.");
     8         this.server = ManagementFactory.getPlatformMBeanServer();
     9 
    10         // CREATE Registe HelloMBean
    11         System.out.println("
    	CREATE, REGISTER a new Hello Standard_MBean:");
    12         Hello hello = new Hello();
    13         hello.setName("xxx");
    14         ObjectName hello_name = null;
    15         try{
    16             hello_name = new ObjectName("jmxBean:name=Hello ");
    17             System.out.println("	OBJECT NAME = " + hello_name);
    18             //将HelloMBean注册到MBeanServer中去
    19             server.registerMBean(hello, hello_name);
    20 
    21             Thread.sleep(60*60*1000);
    22         } catch (Exception e) {
    23             e.printStackTrace();
    24         }
    25     }
    26 
    27 
    28     public static void main(String args[]) {
    29         HelloAgent agent = new HelloAgent();
    30     }
    31 
    32 }

    3、运行代码

      运行HelloAgent的main方法

    4、使用Jconsole访问jmx

      1、打开jconsole,连接

      

      2、查看属性

      

      3、调用方法

      

      

    参考:

      https://baike.baidu.com/item/JMX/2829357?fr=aladdin

      https://www.cnblogs.com/duanxz/category/689081.html

      https://www.cnblogs.com/dongguacai/p/5900507.html

  • 相关阅读:
    nyoj_518_取球游戏_201404161738
    nyoj_528_找球号(三)_201404152050
    nyoj_68_三点顺序_201404152013
    nyoj_123_士兵杀敌(四)_201404131143
    树状数组
    nyoj_116_士兵杀敌(二)_201404131107
    hdu_1024_糖果大战_201404021640
    hdu_1205_吃糖果_201404021440
    nyoj_278_排队_201403282135
    nyoj_127_星际之门(一)_201403282033
  • 原文地址:https://www.cnblogs.com/h--d/p/14876310.html
Copyright © 2011-2022 走看看