JMX 是 Java 平臺上為 應用程序炸客、設(shè)備疾棵、系統(tǒng)等植入的管理功能框架。
在 Java 程序運行過程中痹仙,對 JVM 和系統(tǒng)的監(jiān)測一直是開發(fā)人員在開發(fā)過程中所需要的是尔,在 Java SE 5 之前,需要使用底層 JVM api 才能監(jiān)測 Java 程序運行過程中 JVM 和系統(tǒng)的一些情況开仰,相關(guān)的開發(fā)效率比較低拟枚。為了解決這個問題,Sun 在 Java SE 5 種發(fā)布了 JMX 用來管理監(jiān)測 Java 程序众弓。JMX 提供大量輕量級的監(jiān)測 JVM 和運行中對象/線程的方式恩溅,從而提升了 Java 的管理監(jiān)測能力。
IT系統(tǒng)管理基本框架
IT管理系統(tǒng)的基本架構(gòu)模式谓娃,通過 agent/subagent 把IT資源 報告以消息的形式匯集并展示脚乡, agent / sub agent 通過協(xié)議協(xié)調(diào)通信。
JMX 基本框架
JMX是管理系統(tǒng)和資源之間的一個接口滨达,定義了管理系統(tǒng)和資源之間的交互標奶稠,javax.management.MBeanServer 實現(xiàn) agent 功能俯艰,以標準的方式給出了管理系統(tǒng)訪問 JMX 框架的接口,javax.mangement.MBeaan實現(xiàn)了 subAgent 的功能锌订,以標準的方式給出了 JMX框架訪問資源的接口蟆炊。JMX 包含兩個核心類庫,java.lang.management 提供了基本 VM 的監(jiān)控功能瀑志,javax.management 提供擴展功能涩搓。
JMX 使用 Java Bean 模式來傳遞信息,Mbean(Managed Bean)是通過依賴注入創(chuàng)建的 JavaBean劈猪,代表了運行在 JVM 上的資源昧甘,可以用于收集性能、資源使用率战得、問題信息等統(tǒng)計信息充边,也可以獲取配置或?qū)傩孕畔ⅰR粋€實現(xiàn)了 javax.management.NotificationEmitter 的 MBean,其內(nèi)部的屬性變化可以通知 MBeanServer, 對MBean 變化感興趣的應用程序也可以注冊監(jiān)聽常侦。開發(fā)人員對所關(guān)心的各項性能指標的監(jiān)控浇冰,通過稱之為 MBean 的 Java 對象來實現(xiàn),可以用一個MBean來監(jiān)控操作系統(tǒng)的基本信息聋亡,JVM 的信息肘习,應用程序的信息等。
標準MBean
標準MBean 通過 普通 JavaBean 的方式公開接口坡倔,向 MbeanServer 提供信息漂佩。資源監(jiān)控者(MBean)會登記在 MBServer 內(nèi)部的一個 Repository中。 JMX 的核心是 MBServer罪塔。
虛擬機監(jiān)測
Java SE 5 之后投蝉,java.lang.management 包里包含了許多MXBean 的接口類 和 LockInfo、MemoryUsage征堪、MonitorInfo 和 ThreadInfo等類瘩缆,這些類提供了 JVM 內(nèi)存分配,GC 情況佃蚜,操作系統(tǒng)庸娱、線程調(diào)度、共享鎖和編譯情況都監(jiān)測機制爽锥。
java.lang.management.ManagementFactory 包含一系列MXBean
ClassLoadingMXBean涌韩, 包含類裝在信息,已經(jīng)裝載/卸載類數(shù)量等
ComplilationMXBean氯夷, 當前編譯器和編譯情況;
GarbageCollectorMXBean臣樱, 提供GC次數(shù)和GC 話費總時間都近似值。
MemoryManagerMXBean, 內(nèi)存管理類和內(nèi)存池的名字信息
MemoryMXBean雇毫,整個 JVM 匯總內(nèi)存的使用情況玄捕,包括堆、非堆占用內(nèi)存情況等
MemoryPoolMXBean 提供大量內(nèi)存信息棚放,包括已使用/最大使用內(nèi)存/設(shè)置最大內(nèi)存等枚粘。
OperatingSystemMXBean 操作系統(tǒng)信息,架構(gòu)名/CPU數(shù)/最近負載
RuntimeMXBean 虛擬機參數(shù)等
ThreadMXBean 線程數(shù)量飘蚯、CPU占用情況等