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

UAVStack推出的JVM監控分析工具提供基於頁面的展示方式,以圖形化的方式展現採集到的監控數據;同時提供JVM基本參數獲取、內存dump、線程分析、內存分配採樣和熱點方法分析等功能。前端

引言

做爲AllInOne的智能化服務技術棧,UAVStack提供了很是全面的監控數據採樣功能,同時支持數據監控與預警。近期,咱們整合了原有的數據採集展現功能,新增JVM分析功能,推出了更易用的JVM監控分析工具。git

熟悉JDK的開發者都知道,JDK自己提供了一套JVM分析工具,包括jinfo、jmap、jstack等。用戶能夠經過命令行輕鬆獲取JVM內存堆棧信息、內存對象分配以及JVM啓動基本參數信息。但這些工具須要在命令行環境中執行,且生產環境下則須要經過堡壘機轉發。github

開源社區一些不錯的JVM分析工具也能夠提供獲取JVM基本信息、追蹤堆棧、獲取內存信息等功能,但一樣須要命令行CLI的支持。服務器

UAVStack推出的JVM監控分析工具提供基於頁面的展示方式,以圖形化的方式展現採集到的監控數據;同時提供JVM基本參數獲取、內存dump、線程分析、內存分配採樣和熱點方法分析等功能。架構

1、架構

JVM監控分析工具基於UAVStack既有架構,總體分爲前端、後臺及中間件加強框架(MOF)。其中:框架

  • 前端負責展現數據、向後臺發送用戶執行指令;
  • 後臺負責下發指令、響應用戶查詢、處理採集到的數據;
  • 中間件加強框架(MOF)負責接收後臺下發的指令、執行指令並返回數據或將數據寫入文件,而後經過UAV提供的文件歸集功能上送數據。

總體架構流程以下圖所示:運維

2、關鍵技術

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、功能展現

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智能運維

相關文章
相關標籤/搜索