以前寫了JConsole、VisualVM 依賴的 JMX 技術,而後放出了一個用純 JMX 實現的 web 版本的 JConsole 的截圖,今天源碼來了。前端
原本就是爲了更多的瞭解 JMX,第一步就想把全部的 MBean 和屬性都展現出來,開始在控制檯輸出,可是效果很差,內容太多太長,不夠直觀,而後就加了個 web 端的樹形結構。而後作着作着忽然發現,再稍微改改就能當個 web 版的簡易監控端用了。java
此工具只在 hotspot JVM 8 環境下測試過。可支持查看本地 JVM 和 遠程 JVM 實時監控。git
前端採用 React 16 + Antd + Yarn ,後端 Spring Boot + Java 1.8。具體使用方式能夠到 github 倉庫 README 頁面查看。而且提供了一個在線預覽版本,文末有源碼地址和在線版本的使用方式。
支持本地 JVM 和遠程 JVM 連接。github
全部 MBean 的樹形展現以及屬性、操做的展現。web
JVM 運行狀況實時展現windows
實現的功能有以下幾個方面:後端
1.全部 MBean 的展現;服務器
2.系統信息的展現,包括內存使用、CPU 使用率等等;工具
3.JVM 參數,包括命令行參數和 systemProperties;測試
4.CPU 、Heap、Metaspace、類加載、線程的實時折線圖;
5.垃圾收集器的種類和回收次數;
下面結合這幾部分,說一下 JMX 的使用方式。
正如各類工具裏的 MBean 的樹形展現方式同樣, MBean 自己就是以這種層級關係存在的。
MBean 包含在 Domain 裏,Domain 至關因而一套獨立的空間,這個空間裏能夠定義各類 type,各類 name 的 ObjectName。好比前一篇 JMX 文章裏自定義的那個。
經過 ObjectName 能夠獲取到 MBean 的各類信息,包括屬性、操做、通知。
有些屬性是簡單數據類型,好比 int、long、double、String 類型,另外有些是比較複雜的,比方說 com.sun.management:type=HotSpotDiagnostic 的屬性 DiagnosticOptions 就是 javax.management.openmbean.CompositeData 類型。還有的屬性的數據類型是 javax.management.openmbean.TabularData。這些都要單獨處理。
有些指標是監控會用到的,好比內存、CPU、堆空間、線程、類加載狀況相關的 MBean。
JDK 提供了一個 ManagementFactory,幫助咱們方便的獲取經常使用的 MBean。能夠到 java.lang.management 包下找到這個類看一下注釋和代碼。
OperatingSystemMXBean
能夠獲取操做系統相關的信息,機器名稱、內存使用、CPU使用等信息。
可經過 ManagementFactory.getOperatingSystemMXBean()
方式獲取。
RuntimeMXBean
能夠獲取當前 JVM 的信息,包括 JVM 參數和 JVM 相關的系統參數。
能夠經過 ManagementFactory.getRuntimeMXBean()
方式獲取。
MemoryMXBean
能夠獲取當前 JVM 的內存使用,包括堆內存和非堆內存。
能夠經過 ManagementFactory.getMemoryMXBean()
獲取
ThreadMXBean
獲取 JVM 線程使用狀況,包括活動線程、守護線程、線程峯值等。
能夠經過 ManagementFactory.getThreadMXBean()
獲取。
ClassLoadingMXBean
獲取 JVM 類加載狀況,包括已加載類、未加載類等。
能夠經過 ManagementFactory.getClassLoadingMXBean()
獲取。
GarbageCollectorMXBean
獲取 JVM 垃圾收集器的狀況,包括使用的哪一種垃圾收集器以及回收次數等等。
能夠經過 ManagementFactory.getGarbageCollectorMXBeans()
獲取,注意,這裏獲取到的是一個集合,由於垃圾收集器分爲老年代和新生代兩個。
除了以上幾個經常使用的 MBean ,還有不少其餘的。有些在 ManagementFactory 類裏已提供了,另外還有不少須要本身經過 ObjectName 獲取。
在線體驗
我在服務器上部署了一個體驗版本。由於服務器配置實在慘的可憐,因此須要在本公衆號內回覆「jmx」獲取體驗驗證碼和在線地址。
公衆號:「古時的風箏」或者掃描文末的二維碼
源碼地址
源碼放到了 github 上,地址爲 https://github.com/huzhicheng/little-flower, README 上有具體的使用方式。由於各個操做系統下的 JVM 也是不同的,windows、Mac、Linux 也是不能通用的,因此,沒有提供可用的 release jar 包。好比我開發用的 Mac 和體驗環境 Linux 系統就是不同的,須要單獨編譯。在使用的時候,須要下載源碼,在本地編譯,而後運行。
有興趣的不妨試用一下,歡迎拍磚。
不要吝惜你的「推薦」呦
歡迎關注,不按期更新本系列和其餘文章
古時的風箏
,進入公衆號能夠加入交流羣