UAVStack功能上新:新增JVM監控分析工具

宜信技術學院發表於2019-10-15

摘要:UAVStack推出的JVM監控分析工具提供基於頁面的展現方式,以圖形化的方式展示採集到的監控資料;同時提供JVM基本引數獲取、記憶體dump、執行緒分析、記憶體分配取樣和熱點方法分析等功能。

引言

作為AllInOne的智慧化服務技術棧,UAVStack提供了非常全面的監控資料取樣功能,同時支援資料監控與預警。近期,我們整合了原有的資料採集展示功能,新增JVM分析功能,推出了更易用的JVM監控分析工具。

熟悉JDK的開發者都知道,JDK本身提供了一套JVM分析工具,包括jinfo、jmap、jstack等。使用者可以通過命令列輕鬆獲取JVM記憶體堆疊資訊、記憶體物件分配以及JVM啟動基本引數資訊。但這些工具需要在命令列環境中執行,且生產環境下則需要通過堡壘機轉發。

開源社群一些不錯的JVM分析工具也可以提供獲取JVM基本資訊、追蹤堆疊、獲取記憶體資訊等功能,但同樣需要命令列CLI的支援。

UAVStack推出的JVM監控分析工具提供基於頁面的展現方式,以圖形化的方式展示採集到的監控資料;同時提供JVM基本引數獲取、記憶體dump、執行緒分析、記憶體分配取樣和熱點方法分析等功能。

一、架構

JVM監控分析工具基於UAVStack既有架構,整體分為前端、後臺及中介軟體增強框架(MOF)。其中:

  • 前端負責展示資料、向後臺傳送使用者執行指令;
  • 後臺負責下發指令、響應使用者查詢、處理採集到的資料;
  • 中介軟體增強框架(MOF)負責接收後臺下發的指令、執行指令並返回資料或將資料寫入檔案,然後通過UAV提供的檔案歸集功能上送資料。

整體架構流程如下圖所示:

二、關鍵技術

2.1 JMX

JMX提供相關介面,獲取基礎的JVM監控資料,如記憶體堆大小、GC情況等,是JVM監控資料的基礎。

2.2 中介軟體增強框架(MOF)

作為分析工具整條鏈路的基礎,MOF依附於使用者應用,主要提供以下基礎支援:

  • 基礎資料採集:MOF植入應用中,JMX定期獲取並上報相關JVM的基本資訊資料,為展示和預警提供資料基礎。
  • 請求捕獲、指令執行:JVM監控分析工具的大多數功能都需要下發指令至應用所在的伺服器。MOF負責把下發指令的請求攔截下來,執行並返回對應的結果。

2.3 Java Attach API

Java Attach API是由Sun提供的一套非標準API,可以將使用者連線到執行中的虛擬機器程式上,進行agent的掛載等操作。

在JVM監控分析工具中,Java Attach API主要用於Attach到虛擬機器程式,進行如下操作:

  • 獲取JMX Connection:從外部獲取JVMConnection,得到MXBean,抓取執行資料。(CPU取樣分析)
  • 獲取VirtualMachine物件:呼叫介面,得到堆記憶體分佈資訊。(記憶體取樣分析)

三、功能展示

3.1 基本監控

選擇應用例項後即可進入基本監控頁面。

該頁面主要展示CPU使用率、執行緒情況、記憶體佔用和GC情況。使用者可以根據需求調整時間範圍,檢視不同時段的監控資料。

3.2 JVM摘要

JVM摘要頁面顯示當前虛擬機器的基本引數資訊,包括基本資訊、JVM引數和系統屬性。其中:

  • 基本資訊包括pid、主機資訊、啟動引數以及JVM的啟動時間等最基本、最重要的資訊;
  • JVM引數包括所有JVM啟動引數,使用者可檢視指定的堆大小、垃圾回收器資訊等;
  • 系統屬性包括寫入System.Properties中的所有配置資訊以及Javaagent的配置屬性。

3.3 執行緒分析

執行緒分析通過執行jstack獲取執行緒基本資訊,並對輸出結果進行分析,得到執行緒狀態數量、有無死鎖等資訊。

3.4 記憶體Dump

記憶體Dump通過執行jmap獲取指定JVM的堆疊dump檔案。

使用者可以便捷地在前端一鍵生成dump,不需要再登入堡壘機。點選“重新整理”可以檢視近期dump記憶體的操作記錄。

3.5 CPU分析

CPU分析是基於執行緒棧的取樣分析,主要提供兩個功能:執行緒執行時間以及方法熱點取樣。  

  • 執行緒執行時間是指執行緒在取樣期間的活動時間。查詢結果按照執行緒活動總時間排序,同時提供執行緒名稱和執行緒執行時間資訊,使用者可據此判斷應用的執行情況。

  • 方法熱點取樣統計所有方法的執行時間,提供方法的類名和方法名資訊。其中,方法的自用執行時間不包括方法呼叫其他方法的執行時間。查詢結果按照方法的自用執行時間降序排序,使用者可以檢視當前應用內部耗時較長的執行方法,判斷應用是否異常、是否需要優化。

3.6 記憶體分析

記憶體分析是基於執行緒以及堆的統計取樣分析,主要提供兩個功能:每個執行緒的記憶體分配和堆內分配細節。

  • 執行緒記憶體分配提供每個執行緒的記憶體分配大小和執行緒名稱等資訊,按照記憶體分配大小降序排列。使用者可檢視當前佔用記憶體較大的執行緒。

  • 堆內分配提供了各個類在堆內的分配例項數以及所佔用的堆記憶體,按照堆記憶體大小降序排列。使用者可把該功能當作簡易的dump及分析工具,快速分析記憶體分配情況,發現記憶體分配問題。

總結

JVM監控分析工具是從監控、分析到展示的一體化工具。JDK自帶的工具雖然也可以實現除CPU分析之外的其他功能,但不夠便捷,也無法實現從取樣、分析到圖形化展示的一體化效果。JVM監控分析工具解決了開發人員沒有線上應用堡壘機許可權、無法分析採集到的資料等痛點,同時提供CPU與記憶體取樣分析等功能,以較低的效能開銷獲取較為全面的JVM執行資料,幫助應用開發人員發現與分析問題,為應用開發優化提供參考依據。

UAVStack已在Github上開放原始碼,並提供了安裝部署、架構說明和使用者指南等雙語文件。

官方網站:https://uavorg.github.io/main/

開源地址:https://github.com/uavorg

作者:張明明  

首發於:UAVStack智慧運維


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2660011/,如需轉載,請註明出處,否則將追究法律責任。

相關文章