ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【Java】JMX入门

2021-06-11 19:35:12  阅读:242  来源: 互联网

标签:JMX Java 入门 Agent MBeanServer MBean public name


一、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("\n\tCREATE the MBeanServer.");
 8         this.server = ManagementFactory.getPlatformMBeanServer();
 9 
10         // CREATE Registe HelloMBean
11         System.out.println("\n\tCREATE, 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("\tOBJECT 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

标签:JMX,Java,入门,Agent,MBeanServer,MBean,public,name
来源: https://www.cnblogs.com/h--d/p/14876310.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有