通過spring boot actuator導出dump分析


通過上一篇 監控和管理生產環境spring boot actuator 我們可以知道可以通過boot集成的actuator插件來監控並管理服務的運行狀況,處理由於某種不規范的操作,導致短時間內cpu內存暴增,通過log文件有時很難定位出現問題的環節。遇到這樣的問題,除了通知運維同學通過jmap或jcmd指令導出jvm heap dump(堆轉存文件)文件快速定位問題以外,如果我們的服務仍然可以正常工作的話,還可以通過actuator為我們提供的jvm heap dump接口來導出jvm heap dump文件。

 

loggers 顯示和修改配置的loggers,比較簡單,親自調用看下接口信息即可 false
heapdump dump 包含應用的 JVM 堆信息 true
ID
描述
敏感(Sensitive)

heapdump

第一步:下載heapdum文件以及配置根路勁操作

接口樣例:http://localhost:8060/heapdump 

當然,也可以進行設置監控服務訪問根路徑(如果不設置默認直接ip+端口+/監控接口id)訪問即可。

 

 

則我們訪問所有的監控服務接口路勁為: http://localhost:8060/actuator/heapdump

開發環境可以直接直接在瀏覽器地址欄中粘貼上面url信息進行下載heapdump文件即可。

注意:開發、測試以及生產環境端口可能有所不同,優先取決於我們啟動boot jar服務指令command指令后面的--server.port參數

 

由於測試以及生產環境無法通過外網接口通過瀏覽器下載heap dump文件,所以我們可以直接通過curl命令直接調用接口進行下載我們

所需的接口文件。

以下為curl指令參數詳情信息。

-A/--user-agent <string>              設置用戶代理發送給服務器
-b/--cookie <name=string/file>    cookie字符串或文件讀取位置
-c/--cookie-jar <file>                    操作結束后把cookie寫入到這個文件中
-C/--continue-at <offset>            斷點續轉
-D/--dump-header <file>              把header信息寫入到該文件中
-e/--referer                                  來源網址
-f/--fail                                          連接失敗時不顯示http錯誤
-o/--output                                  把輸出寫到該文件中
-O/--remote-name                      把輸出寫到該文件中,保留遠程文件的文件名
-r/--range <range>                      檢索來自HTTP/1.1或FTP服務器字節范圍
-s/--silent                                    靜音模式。不輸出任何東西
-T/--upload-file <file>                  上傳文件
-u/--user <user[:password]>      設置服務器的用戶和密碼
-w/--write-out [format]                什么輸出完成后
-x/--proxy <host[:port]>              在給定的端口上使用HTTP代理
-#/--progress-bar                        進度條顯示當前的傳送狀態

這里-o(小寫)與-O(大寫)是有區別的

-o(小寫):我們將接口流文件的內容寫入指定文件中,也就是我們需要指定文件名稱。

例如:

可以使用curl的內置option:-o(小寫)保存網頁
$ curl -o linux.html http://

執行完成后會顯示如下界面,顯示100%則表示保存成功

% Total    % Received % Xferd  Average Speed  Time    Time    Time  Current
                                Dload  Upload  Total  Spent    Left  Speed
100 79684    0 79684    0    0  3437k      0 --:--:-- --:--:-- --:--:-- 7781k

-O(大寫):我們需要確保下載的url地址要具體到某個文件不然抓不下來。

例如:

# curl -O http://www.linux.com/hello.sh

由於我們是下載dump文件未指定到具體文件,是以文件流的形式進行下載的,所以我們需要使用-o(小寫)參數進行下載接收流文件。

下載地址:

curl -o xxx.zip http://${host}:${port}/heapdump   ### xxx.zip后綴可以任意指定常規的壓縮包后綴即可,如:tar.gz/zip/gzip

 

第二步:下載heap dump文件分析工具

 jhat 是JDK自帶的用於分析JVM Heap Dump文件的工具,不用另外安裝,使用下面的命令可以將堆文件的分析結果以HTML網頁的形式進行展示。但分析起來不夠友好。

 jhat <heap-dump-file>

1:可以參考使用IBM HeapAnalyzer工具,下載 ha457.jar  直接在本地執行 java -Xmx2g -jar ha*.jar 指令即可。通過Analysis view 可以分析看到dump文件中目前存在的大對象。

 

 

但IBM HeapAnalyzer工具在官網上描述已不在進行維護開發,建議我們結合使用Eclipse Memory Analyzer Tool (MAT) 與 IBM DTFJ Extension。參考:IBM HeapAnalyzer

 
 2:下載eclipse mat工具結合IBM DTFJ Extension 參考:  IBM Memory Analyzer Tool (MAT)

Overview

Overview視圖,即概要界面,顯示了概要的信息,並展示了MAT常用的一些功能。

  • Details 顯示了一些統計信息,包括整個堆內存的大小、類(Class)的數量、對象(Object)的數量、類加載器(Class Loader)的數量。
  • Biggest Objects by Retained Size 使用餅圖的方式直觀地顯示了在JVM堆內存中最大的幾個對象,當光標移到餅圖上的時候會在左邊Inspector和Attributes窗口中顯示詳細的信息。
  • Actions 這里顯示了幾種常用到的操作,算是功能的快捷方式,包括 Histogram、Dominator Tree、Top Consumers、Duplicate Classes,具體的含義和用法見下面;
  • Reports 列出了常用的報告信息,包括 Leak Suspects和Top Components,具體的含義和內容見下;
  • Step By Step 以向導的方式引導使用功能。

Histogram

直方圖,可以查看每個類的實例(即對象)的數量和大小。

Dominator Tree

支配樹,列出Heap Dump中處於活躍狀態中的最大的幾個對象,默認按 retained size進行排序,因此很容易找到占用內存最多的對象。

 OQL

MAT提供了一個對象查詢語言(OQL),跟SQL語言類似,將類當作表、對象當作記錄行、成員變量當作表中的字段。通過OQL可以方便快捷的查詢一些需要的信息,是一個非常有用的工具。

 Thread Overview

此工具可以查看生成Heap Dump文件的時候線程的運行情況,用於線程的分析。

 Run Expert System Test

可以查看分析完成的HTML形式的報告,也可以打開已經產生的分析報告文件,子菜單項如下圖所示:


  • 常用的主要有Leak Suspects和Top Components兩種報告:

    • Leak Suspects 可以說是非常常用的報告了,該報告分析了 Heap Dump並嘗試找出內存泄漏點,最后在生成的報告中對檢測到的可疑點做了詳細的說明;
    • Top Components 列出占用總堆內存超過1%的對象。

     Open Query Browser

    提供了在分析過程中用到的工具,通常都集成在了右鍵菜單中,在后面具體舉例分析的時候會做詳細的說明。如下圖:

    這里僅針對在 Overview 界面中的 Acations中列出的兩項進行說明:

    • Top Consumers 按類、類加載器和包分別進行查詢,並以餅圖的方式列出最大的幾個對象。菜單打開方式如下:
    • Duplicate Classes 列出被加載多次的類,結果按類加載器進行分組,目標是加載同一個類多次被類加載器加載。使用該工具很容易找到部署應用的時候使用了同一個庫的多個版本。菜單打開方式如下圖:

     Find Object by address

    通過十六進制的地址查找對應的對象,見下圖:

    一般我們排查生產環境大對象的定位是非常關鍵的,我們可以從下面這張圖中展示出來:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM