1. 程式人生 > >無意間做了個 web 版的 JVM 監控端(前後端分離 React+Spring Boot)

無意間做了個 web 版的 JVM 監控端(前後端分離 React+Spring Boot)

之前寫了JConsole、VisualVM 依賴的 JMX 技術,然後放出了一個用純 JMX 實現的 web 版本的 JConsole 的截圖,今天原始碼來了。

本來就是為了更多的瞭解 JMX,第一步就想把所有的 MBean 和屬性都展示出來,開始在控制檯輸出,但是效果不好,內容太多太長,不夠直觀,然後就加了個 web 端的樹形結構。然後做著做著突然發現,再稍微改改就能當個 web 版的簡易監控端用了。

此工具只在 hotspot JVM 8 環境下測試過。可支援檢視本地 JVM 和 遠端 JVM 實時監控。

前端採用 React 16 + Antd + Yarn ,後端 Spring Boot + Java 1.8。具體使用方式可以到 github 倉庫 README 頁面檢視。並且提供了一個線上預覽版本,文末有原始碼地址和線上版本的使用方式



支援本地 JVM 和遠端 JVM 連結。


所有 MBean 的樹形展示以及屬性、操作的展示。


JVM 執行情況實時展示

實現的功能有如下幾個方面:

1.所有 MBean 的展示;

2.系統資訊的展示,包括記憶體使用、CPU 使用率等等;

3.JVM 引數,包括命令列引數和 systemProperties;

4.CPU 、Heap、Metaspace、類載入、執行緒的實時折線圖;

5.垃圾收集器的種類和回收次數;

下面結合這幾部分,說一下 JMX 的使用方式。

MBean 的獲取

正如各種工具裡的 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。這些都要單獨處理。

常用的 MBean

有些指標是監控會用到的,比如記憶體、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 系統就是不一樣的,需要單獨編譯。在使用的時候,需要下載原始碼,在本地編譯,然後執行。

有興趣的不妨試用一下,歡迎拍磚。

不要吝惜你的「推薦」呦

歡迎關注,不定期更新本系列和其他文章
古時的風箏 ,進入公眾號可以加入交流群

相關推薦

無意間 web JVM 監控前後分離 React+Spring Boot

之前寫了JConsole、VisualVM 依賴的 JMX 技術,然後放出了一個用純 JMX 實現的 web 版本的 JConsole 的截圖,今天原始碼來了。 本來就是為了更多的瞭解 JMX,第一步就想把所有的 MBean 和屬性都展示出來,開始在控制檯輸出,但是效果不好,內容太多太長,不夠直觀,然後就加了

用java控制檯的2048

玩幾局2048,理解下程式執行過程,程式碼挺簡單但是創造2048這個遊戲的人很牛。 import java.util.Random; import java.util.Scanner; public class game2048 { static Random r

我用STM32MP1疫情監控平臺4—功能完善介面重新設計

@[toc] ### 前言 之前我用STM32MP1和Qt實現了疫情監控平臺,系列教程: - [我用STM32MP1做了個疫情監控平臺1—交叉編譯環境搭建](https://www.cnblogs.com/whik/p/12430277.html) - [我用STM32MP1做了個疫情監控平臺2—Qt環境

今天用node的cheerio模塊某乎的爬蟲

總結 chrome pid 結果 添加 踩坑 刷新 標準 ide   一時興起,想做個爬蟲,經過各種深思熟慮,最後選擇了某乎,畢竟現在某乎的數據質量還是挺高的。說幹就幹    打開某乎首頁,隨便搜索了一串關鍵字,相關的問題和答案就展現在眼前,我就思考怎麽把這些搜索結果

室友玩掃雷通關還跟我炫耀!於是用Python十秒鐘通關的自動掃雷程式,讓他受到驚嚇!

起因是這樣的,室友和我一起玩掃雷高難度,今天他來告訴我他的通關了! 各種炫耀,如下圖! 於是,我用就用Python開發了個自動掃雷程式!跟他裝了逼,瞬間喊我哥,要我教他 好了,不廢話了!本文用於娛樂,歡迎大佬們指點! 進入正題 再說一句廢話,加v❤k

有用的小程式,而不僅僅是小程式

現在很多商戶在大量的小程式代理及電銷的推廣下做了小程式,可是僅僅是做了,過了段時間,發現做了小程式,但是使用者量並沒有激增,銷量也沒有和想象中的那樣蹭蹭的往上升。一切還是照舊,只是小程式成了擺設。所以很多商家得到一個結論:小程式沒有用。 可是,真的是小程式沒有用麼? 今天

最近自己研究vue國際化demo,總結如下

vue專案做多語言(國際化) 第一步、安裝vue-i18n npm install vue-i18n 第二步、在main.js中引入vue-i18n(如下圖) 第三步、建兩個語言包檔案,目錄結構如下圖: 第四步、給這兩個檔案裡寫靜態的頁面展示資料 1、en.js(內容如下圖) 2、zh.js(內容如

VLC,FFMPEG, RTP,28181 學習 網址彙總

https://blog.csdn.net/zhouyongku/article/details/41546789  海康RTSP客戶端連線深入分析  http://www.avahi.org/doxygen/html/client-publish-service_8c

後末日朋克風的夢

先是夢見在太空站休眠艙裡醒來,想起來是從現在時間旅行到了未來,看了下地面監控回放,只見一片荒漠,一個群落慢慢發展起來,中央一座大樓從廢墟中蓋了起來,越建越高,又被破壞從中間倒塌,然後想起來人類文明因為某種原因幾乎毀滅。看起來地面似乎有人類頻繁的活動痕跡,於是我就乘飛行器來到了地面。 很快就遇到了一隊拾荒者,沒

想在家看VIP電影,我用python破解軟體,她很開心!

執行平臺: Windows Python版本: Python3.x IDE: Sublime text3 一、前言 沒有會員,想線上觀看或下載愛奇藝、PPTV、優酷、網易公開課、騰訊視訊、搜狐視訊、樂視、土豆、A站、B站等主流視訊網站的VIP視訊?又不想充會員怎麼辦?博主本次寫的VI

線上流程圖繪製工具

數字繪 線上線框圖、流程圖、網路圖、組織結構圖、UML、BPMN繪製網站,繪製完成之後可以匯出成圖片、SVG、XML,也可以儲存在雲端並能分享給其他使用者。 網站 數字繪 原始碼 輪子 Cloudreve 基於ThinkPHP構建的網盤系統,能夠助您以較低

Python ADB 抖音影象識別機器人

 最近下了個抖音玩,沉迷刷漂亮小姐姐總是刷不到,痛定思痛用 Python ADB (感謝鵝廠影象識別庫)訓練了一個機器人,嘛呀太方便了!!!成果 原理 開啟APP 獲取手機截圖,並對截圖進行

嫌得蛋疼接雞蛋

桶的觸發器 using UnityEngine; public class EggCollider : MonoBehaviour { void OnTriggerEnter(Collider co) { if (co.ta

不安分的程式設計師!阿里90後員工隨時FreeStyle的人工智慧

頂著鴨舌帽、戴著墨鏡,掛著大金鍊子唱著自己寫的rap,這對於從來沒有玩過音樂,甚至五音不全的90後程序員蘆陽來說,看上去是個非常遙遠的夢。 不過最近,他真的在阿里電臺和朋友錄製了人生第一首rap,主題就是關於雙11和人工智慧。幫助他完成心願的,是他自己設計的人工智慧Mu

自己網站 網址:http://www.sunshinelin.club

網址: http://www.sunshinelin.club 當初做這個網站的目的就是為了能夠自己用,想做什麼功能就寫什麼功能。感覺使用自己的東西比較有成就感。 這個是網站的首頁 我用的s

AjaxPanel自定義控制元件實現頁面無重新整理資料互動(示例程式, 效果確實比較Cool, 用法非常簡單! )(示例程式碼下載)

(一) . 簡要           AjaxPanel, 一個自定義控制元件, 只要在頁面中將AjaxPanel作為父控制元件, 則它內部的控制元件在執行時無重新整理.            做了個程式試了一下果然比較Cool !  下面介紹一下具體配置, 配置也比較簡單.

女朋友老是埋怨我技術不行,於是我輔助工具。

事件起因 ❝ 女朋友平時酷愛王者榮耀,所以她沒事的時候也喜歡拉拉我打兩把,這不前段時間還買了一個王者榮耀的李白聯名口紅向我炫耀,心裡不免有點吃醋,一個3D人物能有真人賞心悅目嗎?於是我暗下決心,決定苦練農藥技巧,在她面前秀上一把。其實對於王者榮耀,我的技術也不算太差,和她一起玩的時候總能拿到MVP,就是贏不了

為開源作者賦能,為此我花一個月時間工具平臺

## 前言 在介紹這個專案之前,先聽我BB幾句。 自己做開源也有2,3年了。現在也長期維護著3個開源專案,起初只是一時興趣,覺得做出一個東西放在開源站點上是一件很有意義的事。但是凡是用的人多了,自然會有各種各樣的問題和bug,各種issue要解決。自己的專案也如同自己的孩子一般,也不能放任不管,很多時候想

你以為在的是微服務?不!你只是比單體還糟糕的分散式單體!

昨晚睡覺前,順手擼了幾個群聊的聊天記錄。發現一個很有意思的名詞“分散式單體”,順藤摸瓜看了一下之前的聊天記錄,由於內容罵罵咧咧,我就不貼出來了。。。大致內容就是某公司在做微服務改造,但改的不倫不類,形式上像微服務,而本質上依然是單體,甚至連單體都不如。 這樣的改造現象,其實在國內還是蠻多見的。下面就來聊聊這

Html+JS+PowerShell打造WebAD管理系統

跨域 owin powershell restful Webapi 最近發現gihub上早已有人把powershell的restful webapi做好了,而且是自宿主的owin。比上次用到的httplistener健壯許多。貌似還是支持job,runspace的。https://gith