作為AllInOne的智慧化服務技術棧,UAVStack提供了非常全面的監控資料取樣功能,同時支援資料監控與預警。近期,我們整合了原有的資料收集展示功能,新增JVM分析功能,推出了更容易使用的JVM監控分析工具。
熟悉JDK的開發者都知道,JDK本身提供了一套JVM分析工具,包括jinfo、jmap、jstack等。使用者可以透過命令列輕鬆取得JVM記憶體堆疊資訊、記憶體物件分配以及JVM啟動基本參數資訊。但這些工具需要在命令列環境中執行,且生產環境下則需要透過堡壘機轉送。
開源社群一些不錯的JVM分析工具也可以提供取得JVM基本資訊、追蹤堆疊、取得記憶體資訊等功能,但同樣需要命令列CLI的支援。
UAVStack推出的JVM監控分析工具提供基於頁面的展現方式,以圖形化的方式展示採集到的監控資料;同時提供JVM基本參數取得、記憶體dump、執行緒分析、記憶體分配採樣和熱點方法分析等功能。
JVM監控分析工具基於UAVStack既有架構,整體分為前端、後台及中介軟體增強框架(MOF)。其中:
前端負責展示資料、向後台發送使用者執行指令;
後台負責下指令、回應使用者查詢、處理擷取到的資料;
中間件增強框架(MOF)負責接收後台下發的指令、執行指令並返回資料或將資料寫入文件,然後透過UAV提供的文件歸集功能上送資料。
整體架構流程如下圖所示:
JMX提供相關接口,取得基礎的JVM監控數據,如記憶體堆大小、GC情況等,是JVM監控數據的基礎。
作為分析工具整條連結的基礎,MOF依附於使用者應用,主要提供以下基礎支援:
基礎資料收集:MOF植入應用中,JMX定期取得並回報相關JVM的基本資訊數據,為展示和預警提供資料基礎。
請求擷取、指令執行:JVM監控分析工具的大多數功能都需要下發指令到應用程式所在的伺服器。 MOF負責把下發指令的請求攔截下來,執行並回傳對應的結果。
Java Attach API是由Sun提供的一套非標準API,可以將使用者連接到運行中的虛擬機器進程上,進行agent的掛載等操作。
在JVM監控分析工具中,Java Attach API主要用於Attach到虛擬機器進程,進行以下操作:
取得JMX Connection:從外部取得JVMConnection,得到MXBean,抓取運行資料。 (CPU採樣分析)
取得VirtualMachine物件:呼叫接口,得到堆記憶體分佈資訊。 (記憶體採樣分析)
選擇應用程式實例後即可進入基本監控頁面。
此頁面主要展示CPU使用率、執行緒情況、記憶體佔用和GC情況。使用者可依需求調整時間範圍,查看不同時段的監控資料。
JVM摘要頁面顯示目前虛擬機器的基本參數訊息,包括基本資訊、JVM參數和系統屬性。其中:
基本資訊包括pid、主機資訊、啟動參數、JVM的啟動時間等最基本、最重要的資訊;
執行緒執行時間是指執行緒在取樣期間的活動時間。查詢結果依照執行緒活動總時間排序,同時提供執行緒名稱和執行緒執行時間信息,使用者可據此判斷應用程式的執行情況。
方法熱點取樣統計所有方法的執行時間,提供方法的類別名稱和方法名稱資訊。其中,方法的自用執行時間不包括方法呼叫其他方法的執行時間。查詢結果依照方法的自用執行時間降序排序,使用者可以查看目前應用程式內部耗時較長的執行方法,判斷應用程式是否異常、是否需要最佳化。
記憶體分析是基於執行緒以及堆的統計採樣分析,主要提供兩個功能:每個線程的記憶體分配和堆內分配細節。
線程記憶體分配提供每個線程的記憶體分配大小和線程名稱等信息,按照記憶體分配大小降序排列。使用者可查看目前佔用記憶體較大的執行緒。
堆內分配提供了各個類別在堆內的分配實例數以及所佔用的堆內存,按照堆記憶體大小降序排列。使用者可把此功能當作簡易的dump及分析工具,快速分析記憶體分配狀況,發現記憶體分配問題。
以上是UAVStack中JVM監控分析工具怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!