前言
在 Java 程序的運(yùn)行過程中,對 JVM 和系統(tǒng)的監(jiān)測一直是 Java 開發(fā)人員在開發(fā)過程所需要的。一直以來,Java 開發(fā)人員必須通過一些底層的 JVM API,比如 JVMPI 和 JVMTI 等,才能監(jiān)測 Java 程序運(yùn)行過程中的 JVM 和系統(tǒng)的一系列情況,這種方式一直以來被人所詬病,因?yàn)檫@需要大量的 C 程序和 JNI 調(diào)用,開發(fā)效率十分低下。于是出現(xiàn)了各種不同的專門做資源管理的程序包。為了解決這個(gè)問題,Sun 公司也在其 Java SE 5 版本中,正式提出了 Java 管理擴(kuò)展(Java Management Extensions,JMX)用來管理檢測 Java 程序(同時(shí) JMX 也在 J2EE 1.4 中被發(fā)布)。
JMX 的提出,讓 JDK 中開發(fā)自檢測程序成為可能,也提供了大量輕量級的檢測 JVM 和運(yùn)行中對象/線程的方式,從而提高了 Java 語言自己的管理監(jiān)測能力。
JMX 和系統(tǒng)管理
管理系統(tǒng)(Management System)
要了解 JMX,我們就必須對當(dāng)前的 IT 管理系統(tǒng)有一個(gè)初步的了解。隨著企業(yè) IT 規(guī)模的不斷增長,IT 資源(IT resource)數(shù)量不斷增加,IT 資源的分布也越來越分散??梢韵胂?,甚至對于一家只有幾百臺 PC 公司的 IT 管理人員來說,分發(fā)一個(gè)安全補(bǔ)丁并且保證其在每臺 PC 上的安裝,如果只依賴人工來完成那簡直就是一場噩夢。這樣,IT 管理系統(tǒng)就應(yīng)運(yùn)而生。
然而,CPU、網(wǎng)卡、存儲陣列是 IT 資源;OS、MS Office、Oracle database、IBM Websphere 也是 IT 資源。IT 管理系統(tǒng)若要對這些 IT 資源進(jìn)行管理,就必須對這些管理對象有所了解:形形色色的 IT 資源就像是說著不同語言的人:Oralce 數(shù)據(jù)庫表達(dá)內(nèi)存緊張的方式和 Window XP 是絕然不同的, 而 IT 管理系統(tǒng)就像建造通天塔的經(jīng)理,必須精通所有的語言, 這幾乎是一個(gè)不可能完成的任務(wù)。難道 IT 管理系統(tǒng)是另外一個(gè)通天塔嗎?當(dāng)然不是!其實(shí)我們只要給每個(gè) IT 資源配個(gè)翻譯就可以了。
管理系統(tǒng)的構(gòu)架
上圖分析了管理系統(tǒng)的基本構(gòu)架模式。其中 Agent / SubAgent 起到的就是翻譯的作用:把 IT 資源報(bào)告的消息以管理系統(tǒng)能理解的方式傳送出去。
也許讀者有會問,為什么需要 Agent 和 SubAgent 兩層體系呢?這里有兩個(gè)現(xiàn)實(shí)的原因:
管理系統(tǒng)一般是一個(gè)中央控制的控制軟件,而 SubAgent 直接監(jiān)控一些資源,往往和這些資源分布在同一物理位置。當(dāng)這些 SubAgent 把狀態(tài)信息傳輸?shù)焦芾硐到y(tǒng)或者傳達(dá)管理系統(tǒng)的控制指令的時(shí)候,需要提供一些網(wǎng)絡(luò)傳輸?shù)墓δ堋?BR> 管理系統(tǒng)的消息是有一定規(guī)范的,消息的翻譯本身是件復(fù)雜而枯燥的事情。
一般來說,管理系統(tǒng)會將同一物理分布或者功能類似的 SubAgent 分組成一組,由一個(gè)共用的 Agent 加以管理。在這個(gè) Agent 里封裝了 1 和 2 的功能。
JMX 和管理系統(tǒng)
JMX 既是 Java 管理系統(tǒng)的一個(gè)標(biāo)準(zhǔn),一個(gè)規(guī)范,也是一個(gè)接口,一個(gè)框架。圖 2 展示了 JMX 的基本架構(gòu)。
和其它的資源系統(tǒng)一樣,JMX 是管理系統(tǒng)和資源之間的一個(gè)接口,它定義了管理系統(tǒng)和資源之間交互的標(biāo)準(zhǔn)。>javax.management.MBeanServer 實(shí)現(xiàn)了 Agent 的功能,以標(biāo)準(zhǔn)的方式給出了管理系統(tǒng)訪問 JMX 框架的接口。而 >javax.management.MBeans 實(shí)現(xiàn)了 SubAgent 的功能,以標(biāo)準(zhǔn)的方式給出了 JMX 框架訪問資源的接口。而從類庫的層次上看,JMX 包括了核心類庫 >java.lang.management 和 >javax.management 包。>java.lang.management 包提供了基本的 VM 監(jiān)控功能,而 >javax.management 包則向用戶提供了擴(kuò)展功能。
在 Java 程序的運(yùn)行過程中,對 JVM 和系統(tǒng)的監(jiān)測一直是 Java 開發(fā)人員在開發(fā)過程所需要的。一直以來,Java 開發(fā)人員必須通過一些底層的 JVM API,比如 JVMPI 和 JVMTI 等,才能監(jiān)測 Java 程序運(yùn)行過程中的 JVM 和系統(tǒng)的一系列情況,這種方式一直以來被人所詬病,因?yàn)檫@需要大量的 C 程序和 JNI 調(diào)用,開發(fā)效率十分低下。于是出現(xiàn)了各種不同的專門做資源管理的程序包。為了解決這個(gè)問題,Sun 公司也在其 Java SE 5 版本中,正式提出了 Java 管理擴(kuò)展(Java Management Extensions,JMX)用來管理檢測 Java 程序(同時(shí) JMX 也在 J2EE 1.4 中被發(fā)布)。
JMX 的提出,讓 JDK 中開發(fā)自檢測程序成為可能,也提供了大量輕量級的檢測 JVM 和運(yùn)行中對象/線程的方式,從而提高了 Java 語言自己的管理監(jiān)測能力。
JMX 和系統(tǒng)管理
管理系統(tǒng)(Management System)
要了解 JMX,我們就必須對當(dāng)前的 IT 管理系統(tǒng)有一個(gè)初步的了解。隨著企業(yè) IT 規(guī)模的不斷增長,IT 資源(IT resource)數(shù)量不斷增加,IT 資源的分布也越來越分散??梢韵胂?,甚至對于一家只有幾百臺 PC 公司的 IT 管理人員來說,分發(fā)一個(gè)安全補(bǔ)丁并且保證其在每臺 PC 上的安裝,如果只依賴人工來完成那簡直就是一場噩夢。這樣,IT 管理系統(tǒng)就應(yīng)運(yùn)而生。
然而,CPU、網(wǎng)卡、存儲陣列是 IT 資源;OS、MS Office、Oracle database、IBM Websphere 也是 IT 資源。IT 管理系統(tǒng)若要對這些 IT 資源進(jìn)行管理,就必須對這些管理對象有所了解:形形色色的 IT 資源就像是說著不同語言的人:Oralce 數(shù)據(jù)庫表達(dá)內(nèi)存緊張的方式和 Window XP 是絕然不同的, 而 IT 管理系統(tǒng)就像建造通天塔的經(jīng)理,必須精通所有的語言, 這幾乎是一個(gè)不可能完成的任務(wù)。難道 IT 管理系統(tǒng)是另外一個(gè)通天塔嗎?當(dāng)然不是!其實(shí)我們只要給每個(gè) IT 資源配個(gè)翻譯就可以了。
管理系統(tǒng)的構(gòu)架
上圖分析了管理系統(tǒng)的基本構(gòu)架模式。其中 Agent / SubAgent 起到的就是翻譯的作用:把 IT 資源報(bào)告的消息以管理系統(tǒng)能理解的方式傳送出去。
也許讀者有會問,為什么需要 Agent 和 SubAgent 兩層體系呢?這里有兩個(gè)現(xiàn)實(shí)的原因:
管理系統(tǒng)一般是一個(gè)中央控制的控制軟件,而 SubAgent 直接監(jiān)控一些資源,往往和這些資源分布在同一物理位置。當(dāng)這些 SubAgent 把狀態(tài)信息傳輸?shù)焦芾硐到y(tǒng)或者傳達(dá)管理系統(tǒng)的控制指令的時(shí)候,需要提供一些網(wǎng)絡(luò)傳輸?shù)墓δ堋?BR> 管理系統(tǒng)的消息是有一定規(guī)范的,消息的翻譯本身是件復(fù)雜而枯燥的事情。
一般來說,管理系統(tǒng)會將同一物理分布或者功能類似的 SubAgent 分組成一組,由一個(gè)共用的 Agent 加以管理。在這個(gè) Agent 里封裝了 1 和 2 的功能。
JMX 和管理系統(tǒng)
JMX 既是 Java 管理系統(tǒng)的一個(gè)標(biāo)準(zhǔn),一個(gè)規(guī)范,也是一個(gè)接口,一個(gè)框架。圖 2 展示了 JMX 的基本架構(gòu)。
和其它的資源系統(tǒng)一樣,JMX 是管理系統(tǒng)和資源之間的一個(gè)接口,它定義了管理系統(tǒng)和資源之間交互的標(biāo)準(zhǔn)。>javax.management.MBeanServer 實(shí)現(xiàn)了 Agent 的功能,以標(biāo)準(zhǔn)的方式給出了管理系統(tǒng)訪問 JMX 框架的接口。而 >javax.management.MBeans 實(shí)現(xiàn)了 SubAgent 的功能,以標(biāo)準(zhǔn)的方式給出了 JMX 框架訪問資源的接口。而從類庫的層次上看,JMX 包括了核心類庫 >java.lang.management 和 >javax.management 包。>java.lang.management 包提供了基本的 VM 監(jiān)控功能,而 >javax.management 包則向用戶提供了擴(kuò)展功能。

