1. 程式人生 > 其它 >【Java】JMX入門

【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("\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