天天看點

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

引言

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

熟悉JDK的開發者都知道,JDK本身提供了一套JVM分析工具,包括jinfo、jmap、jstack等。使用者可以通過指令行輕松擷取JVM記憶體堆棧資訊、記憶體對象配置設定以及JVM啟動基本參數資訊。但這些工具需要在指令行環境中執行,且生産環境下則需要通過堡壘機轉發。

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

UAVStack推出的JVM監控分析工具提供基于頁面的展現方式,以圖形化的方式展示采集到的監控資料;同時提供JVM基本參數擷取、記憶體dump、線程分析、記憶體配置設定采樣和熱點方法分析等功能。

一、架構

JVM監控分析工具基于UAVStack既有架構,整體分為前端、背景及中間件增強架構(MOF)。其中:

  • 前端負責展示資料、向背景發送使用者執行指令;
  • 背景負責下發指令、響應使用者查詢、處理采集到的資料;
  • 中間件增強架構(MOF)負責接收背景下發的指令、執行指令并傳回資料或将資料寫入檔案,然後通過UAV提供的檔案歸集功能上送資料。

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

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

二、關鍵技術

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情況。使用者可以根據需求調整時間範圍,檢視不同時段的監控資料。

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

3.2 JVM摘要

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

-基本資訊包括pid、主機資訊、啟動參數以及JVM的啟動時間等最基本、最重要的資訊;

  • JVM參數包括所有JVM啟動參數,使用者可檢視指定的堆大小、垃圾回收器資訊等;
  • 系統屬性包括寫入System.Properties中的所有配置資訊以及Javaagent的配置屬性。
UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

3.3 線程分析

線程分析通過執行jstack擷取線程基本資訊,并對輸出結果進行分析,得到線程狀态數量、有無死鎖等資訊。

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

3.4 記憶體Dump

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

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

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

3.5 CPU分析

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

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

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

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

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

3.6 記憶體分析

記憶體分析是基于線程以及堆的統計采樣分析,主要提供兩個功能:每個線程的記憶體配置設定和堆内配置設定細節。

-線程記憶體配置設定提供每個線程的記憶體配置設定大小和線程名稱等資訊,按照記憶體配置設定大小降序排列。使用者可檢視目前占用記憶體較大的線程。

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

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

UAVStack JVM監控分析工具:圖形化展示采集及分析監控資料

總結

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

UAVStack已在Github上開放源碼,并提供了安裝部署、架構說明和使用者指南等雙國文檔。

官方網站:

https://uavorg.github.io/main/

開源位址:

https://github.com/uavorg

作者:張明明

首發于:UAVStack智能運維