什么是JMX?
Java管理擴展(JMX)是一種API,用于管理或監視各種資源,例如應用程序,設備,服務,當然還有JVM。 通過Java社區流程(JCP)開發,JMX技術被構建為Java Specification Request 3。
JMX技術提供了遠程訪問,因此可以從遠程計算機上實現應用程序的管理。 JMX的用途非常廣泛,包括以下內容:
- 在應用程序配置中進行更改,或僅檢查當前配置(在與遠程計算機打交道時很有用)。
- 提取和累積數據以用于資源使用情況的統計分析或應用程序行為監視
- 有關狀態更改或檢測到的錯誤的通知
JVM資源由一系列Java對象(稱為受管Bean或簡稱為MBean)來檢測。 這些Bean已在托管對象服務器(MBean Server)中注冊。 該服務器可以在支持Java編程語言的大多數設備上運行,并充當管理代理。 JMX代理是我們用來管理已檢測資源的工具。 代理由MBean服務器(MBean注冊的位置)和提供處理MBean手段的服務組成。 管理基礎結構不會干擾資源的檢測方式,反之亦然,因此無論資源管理應用程序的實現如何,都可以對資源進行相同的管理。
JMX技術是實現Java代理,檢測Java代碼,創建管理應用程序和管理中間件的標準且靈活的方式。 JMX連接器是允許程序員從遠程應用程序訪問JMX代理的鏈接。 不管它們使用的通信協議如何,JMX連接器都提供相同的管理接口。 因此,管理應用程序可以透明方式管理資源,而無需注意所使用的通信協議。
JMX架構
JMX技術由兩個規范定義,即Java規范請求3和Java規范請求160,這兩個規范都是通過Java社區流程開發的。 您可以將架構視為以下三個層次:
- 工具:通過ManagedBeans對資源進行工具,ManagedBeans通過JMX代理公開其管理接口。
- 代理:它的主要組件是MBean服務器。 代理提供了一組用于處理Mbean的服務,并且是直接控制資源并使資源可用于遠程管理的組件。
- 遠程管理:可以通過協議適配器和標準連接器從JVM外部訪問JMX代理。
通過JMX技術管理資源需要首先使用Java編程語言對資源進行檢測。 這意味著需要使用Java MBean來實現對資源工具的訪問。 JMX的標準化方式使開發人員可以輕松創建可管理的應用程序,而不必了解和理解復雜的管理系統。
盡管不是必需的,但JMX代理通常與托管應用程序位于同一臺計算機上。 由于執行檢測的方式,它不知道其管理的資源。 遵循JMX規范進行檢測的任何資源都可以使用提供該資源所需服務的任何JMX代理。 JMX代理不應該知道管理應用程序正在訪問它的方式。 這確保了組件之間的高度獨立性。
有許多訪問JMX API工具的方法。 可以通過現有協議(例如SNMP(簡單網絡管理協議))或專有協議來提供訪問。 該連接通過MBeans Server所依賴的協議適配器和連接器進行路由,并使JMX代理可以從其JVM外部進行訪問。 每個適配器都提供了在MBeans服務器中注冊的所有MBean的視圖。 所有連接器都提供用于遠程管理的相同接口。
JMX技術是基于RMI(遠程方法調用)導出JMX API的標準化方法,它還提供了基于TCP套接字的協議,即JMX消息傳遞協議(JMXMP)。 不幸的是,并非所有JMX Remote API的實現都支持第二個基于TCP套接字的協議,例如Java SE平臺未包含該協議。
什么是MBean?
MBean是實現資源檢測的Java對象。 他們必須遵守JMX規范,以便以標準方式提供工具。 資源可以由一個或多個動態的或標準的MBean來檢測。 標準bean是除遵循JMX規范外,它們還遵循JavaBeans(TM)組件模型的對象,而動態bean則遵循特定的接口,以提供更大的運行時靈活性。
MBean的管理接口包含以下內容:
- 可以讀取和/或寫入的命名和類型化屬性
- 可以調用的名稱和類型化操作
- Mbean可以發出的類型通知
標準Java MBean類通過其操作和屬性公開托管資源。 屬性通過getter和setter公開。 JMX代理使用自省功能來確定MBean提供的操作,從而非常容易且直接地管理新資源。 JVM本身是開箱即用的,可以輕松地以動態方式加載JMX代理,從而可以對JVM進行遠程管理和監視。
MXBeans簡介
如果滿足以下要求之一,則接口為MXBean:
- 它用@MXBean批注標記,以明確指定接口代表MXBean的事實
- 它沒有用@MXBean(false)批注標記以指定該接口不是MXBean
- 它的名稱以MXBean結尾
MXBean是一種概念,它提供了一種編程MBean的簡便方法,該MBean僅引用javax.management.openmbean中定義的預定義類型集。 這樣可以確保即使客戶端無權訪問MBean的模型特定類,任何客戶端都可以使用MBean。 這些概念將作為與標準MBean的比較提供。
所有MXBean方法參數和返回值都必須使用Open Types進行描述,因為MXBean是Open MBean上的一種。 對于每個Java類型J,以下描述了MXBean映射:
- 類型J的對應Open Type,opentype(J)
- 映射的Java類型,opendata(J)
- 值從J到opendata的轉換方式(J)
僅當Java類型J是從J派生opentype(J)的映射時,Java類型J才可以是MXBean中的方法參數的類型或返回值。如果存在將opendata(J)轉換回J的方法,則J是可重構的。為了使Mbean成為MXBean,所有方法參數都必須是可重構的,因為在方法調用時,MXBean框架會將參數從opendata(J)轉換為J。
Java平臺隨附的MXBean如下:ClassLoadingMXBean,CompilationMXBean,MemoryMXBean,ThreadMXBean,OperatingSystemMXBean,GarbageCollectorMXBean,MemoryManagerMXBean,MemoryPoolMXBean。
動態MBean在運行時定義其管理接口。 例如,數據庫MBean將確定從數據庫讀取數據后所公開的屬性的類型和名稱。 任何實現DynamicMBean的Java對象都是動態MBean。
Open MBean是一種動態MBean。 Open MBean由Java包javax.management.openmbean定義,從而簡化了遠程管理應用程序的操作,而無需管理應用程序知道應用程序特定的類型。 Open MBean的所有方法參數和返回值都是稱為Open Types的小型Java類型子集的類型。
動態MBean的另一種類型是模型MBean。 這些MBean由Java包javax.management.modelmbean定義,充當托管資源和管理接口之間的橋梁。 管理接口和資源被指定為Java對象。 這些MBean可用于為不同的托管資源提供通用功能(可針對不同資源多次使用)。
參考:來自Java出現日歷博客的JCG合作伙伴 Bogdan-Adrian Mihut的Java管理擴展 。
翻譯自: https://www.javacodegeeks.com/2012/12/java-management-extensions.html