JMX學習詳解
一、概述:
JMX(Java Management Extensions,即Java管理擴展)是一個為應用程序、設備、系統等植入管理功能的框架。
JMX的核心類是MBean(準確說是接口),用來描述一個可管理的資源。
二、作用:
試想你開發了一個軟件(如WEB網站),它是在24小時不間斷運行的,那麽你可能會想要“監控”這個軟件的運行情況,比如收到了多少數據,
有多少人登錄等等。或者你又想“配置”這個軟件,比如現在訪問人數比較多,你想把數據連接池設置得大一些。
你也許會專門為這些管理來開發軟件,但如果你借助JMX,則會發現創建這樣的管理程序是如此簡單。因為你無需為管理程序來開發界面,
已經有通用的JMX管理軟件,如MC4J,或者是用一般都附帶提供的HTML網頁來管理,你要做的僅僅是將自己要被管理和監控類的按照
JMX規範修改一下即可。
中間件軟件WebLogic的管理頁面就是基於JMX開發的,而JBoss則整個系統都基於JMX構架。
三、模型:
JMX的三層架構圖:
Probe Level負責資源的檢測(獲取信息),包含MBeans,通常也叫做Instrumentation Level。
The Agent Level 或者叫做MBean Server(代理服務器) ,是JMX的核心,連接Mbeans和遠程監控程序。
Remote Management Level通過connectors和adaptors來遠程操作MBean Server。
四、簡單實例:
開發前註意:
JDK已經集成了 jmxri.jar、jmxremote.jar、rmissl.jar三個包的代碼
根據項目需要可引入 jmxtools.jar(HtmlAdaptorServer類需引入)、jmxremote_optional.jar(暫時沒有用到)
1.建立被管理Hello類的MBean接口(接口名必須是要管理的類名+MBean,接口定義了要暴露的屬性和方法)
java代碼:
package cn.ac.aure; public interface HelloMBean {public String getName(); public String setName(String name); public void printHello(); public void printHello(String name); }
2.建立一個需要被JMX管理的類Hello
java代碼:
package cn.ac.aure; public class Hello implements HelloMBean{ private String name; @Override public String getName() { return this.name; } @Override public String setName(String name) { return this.name = name; } @Override public void printHello() { System.out.println("hello," + this.name); } @Override public void printHello(String theName) { System.out.println("hello," + theName); } }
3.創建一個Agent類
java代碼:
package cn.ac.aure; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; import com.sun.jdmk.comm.HtmlAdaptorServer; public class HelloAgent { public static void main(String[] args) throws Exception { MBeanServer server = MBeanServerFactory.createMBeanServer(); ObjectName helloName = new ObjectName("hello:name=HelloAgent"); server.registerMBean(new Hello(), helloName); HtmlAdaptorServer adaptor = new HtmlAdaptorServer(); ObjectName adaptorName = new ObjectName("adapator:name=HtmlAdaptor"); adaptor.setPort(9097); server.registerMBean(adaptor, adaptorName); adaptor.start(); System.out.println("jmx is start......"); } }
首先獲得MBean Server,之後便可將需要管理的MBean註冊到MBean Server中,註冊MBean需要定義其對象名稱,
對象名稱類型為ObjectName,這裏對象名稱必須由域名加一個或多個鍵值對組成,這裏bcndyl為域名,後面的即為鍵
值對。最後我們讓線程保持睡眠,以便可以讓Manager連接過來管理暴露的MBean。
4.管理MBean:
4.1 運行HelloAgent,打開IE輸入http://localhost:9097就可以看到註冊的MBean
4.2 點擊MBean對象後可以管理對象的屬性和方法
按上圖操作:在eclipse的控制臺依次打印
hello,lcs
hello,chris
5.說明:
5.1 HtmlAdaptorServer在jmxtools.jar包中
5.2 MBeanServer是一個包含所有註冊MBean的倉庫.它是JMX代理層的核心.JMX1.0規範提供一個接口叫 javax.management.MBeanServer.
所有管理的在MBean操作通過MBeanServer執行.使用MBeanServer實例,你能夠管理所有MBean.每一個MBean具有一個唯一標誌,叫ObjectName.
5.3 ObjectName (javax.management.ObjectName)是一個類,唯一標誌一個在MBeanServer的MBean.
這個對象名稱用於管理應用程序來標誌MBean以便操作能夠在適當的MBean上被調用.
5.4 AdaptorServer,這個類將決定MBean的管理界面,這裏用最普通的Html型界面。AdaptorServer其實也是一個MBean
五、出處:
文件主要是轉載於他處:
1.本文出自 “點滴積累” 博客,請務必保留此出處http://tianxingzhe.blog.51cto.com/3390077/1651588
2.本文出自ghost丶桃子博客,請務必保留此出處https://yq.aliyun.com/articles/48801?spm=5176.100240.searchblog.45.zrkjb6
JMX學習詳解