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

  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/h--d/p/14876310.html
Copyright © 2011-2022 走看看