Arthas是診斷Java領域線上問題的利器,利用字節碼增強技術,可以在不重啟JVM進程的情況下,查看程序的運行情況。
前提條件
說明 僅應用監控專家版支持Arthas診斷功能。
- 新開通EDAS的賬號或15天內未使用舊版Arthas診斷功能的賬號僅支持使用新版Arthas診斷功能。
- ARMS Agent版本為v2.7.1.3或以上。
- 已接入應用監控。具體操作,請參見應用監控概述。
- 應用的編程語言需要為Java。
- 3658端口未被占用。
背景信息
EDAS提供的Arthas診斷功能主要用于補齊EDAS在實時診斷方面的能力。EDAS的Arthas診斷功能包括以下幾種類型:
- JVM概覽:查看當前JVM進程實時的內存使用情況、系統信息、系統變量和環境變量。
- 線程分析:查看當前JVM進程的線程耗時情況以及指定線程的實時方法棧。
- 方法執行分析:抓取任意方法(非JDK方法)滿足指定條件的一次執行記錄,記錄該方法的參數、異常、返回值以及方法內部各個方法執行耗時。
- 對象查看器:查看任意類的某個實例實時的屬性取值情況。
- 實時看板:常見組件的實時看板,例如,Druid連接池的實時看板可以看到連接池的配置、使用情況以及SQL執行耗時情況。
- 性能分析:對CPU耗時、內存分配等對象進行一定時間的采樣并生成相應的火焰圖。
- Arthas Shell:通過命令行方式使用Arthas診斷。
開通Arthas診斷功能
- 登錄ARMS控制臺,在左側導航欄選擇 。
- 在應用列表頁面頂部選擇目標地域,然后單擊目標應用名稱。說明 語言列顯示圖標的應用為接入應用監控的應用,顯示-圖標的應用為接入可觀測鏈路 OpenTelemetry 版的應用。
- 在左側導航欄中單擊應用設置,并在右側單擊自定義配置頁簽。
- 在自定義配置頁簽的Arthas監控區域,打開Arthas開關,根據需求選擇是否僅對部分IP進行Arthas診斷,并添加目標IP。
- 在自定義配置頁簽左下角單擊保存。
查看Arthas診斷信息
登錄EDAS控制臺。
在左側導航欄,單擊應用管理 > 應用列表,在頂部菜單欄選擇地域并在頁面上方選擇微服務空間,在集群類型下拉列表中選擇K8s集群,然后單擊目標應用名稱。
- 在應用詳情的左邊導航欄中選擇 。
- 在Arthas診斷頁面頂部下拉列表選擇待診斷的應用實例。
- 若該實例的Agent版本未升級至2.7.1.3或以上,頁面會提示您需要先升級Agent。
- 若該實例的Agent版本已升級至2.7.1.3或以上,頁面會顯示該實例的Arthas診斷信息。
JVM概覽
JVM概覽支持查看應用的JVM相關信息,包括JVM內存、操作系統信息、變量信息等,幫助您了解JVM的總體情況。
Arthas診斷頁面默認顯示JVM概覽頁簽,您可以在JVM概覽頁簽查看以下信息:
- JVM內存:JVM內存的相關信息,包括堆內存使用情況、非堆內存使用情況、GC情況等。
- 操作系統信息:操作系統的相關信息,包括平均負載情況,操作系統名稱、操作系統版本、Java版本等。
- 變量信息:變量的相關信息,包括系統變量和環境變量。
線程耗時分析
線程耗時分析支持顯示該應用的所有線程和查看線程的堆棧信息,幫助您快速定位耗時較高的線程。
- 在Arthas診斷頁面,單擊線程耗時分析頁簽。線程耗時分析頁簽會實時獲取當前JVM進程的線程耗時情況,并將相似線程聚合。
- 單擊線程左側的+圖標展開線程明細,可以查看線程的ID、CPU使用率和狀態。
- 如需查看目標線程的堆棧信息,您可以在目標線程右側的操作列,單擊查看實時堆棧。
方法執行分析
方法執行分析支持抓取方法的某一次執行的耗時、入參、返回值等信息和鉆入,幫助您快速定位導致慢調用的根本原因,以及問題線下無法復現或日志缺失等場景。
- 在Arthas診斷頁面,單擊方法執行分析頁簽。
- 在方法執行分析頁簽的搜索框中輸入類名的關鍵詞,然后單擊圖標。
- 在搜索到的類中選擇需要診斷的類,然后在右側方法選擇框選取該類的某個方法,單擊確定。頁面將會顯示EDAS隨機抓取的該方法的某一次執行的信息。
- 左側執行堆棧區域顯示診斷方法的內部執行記錄。
- 如需鉆入某個內部方法,在其右側操作列,單擊鉆入。
- 如需查看方法源碼,單擊執行堆棧區域頂部的查看方法源碼。如下圖所示,每一次內部方法的執行耗時都會以注釋的方式顯示在源代碼中。
- 右側方法執行結果區域顯示方法執行的參數值、返回值、異常、成員變量以及此次方法執行的TraceID。
- 右側設置執行條件區域執行以下步驟,可以設置方法執行條件來抓取滿足條件的方法執行記錄。
- 選擇當前方法中的一個重載方法。
- 在請選擇初始過濾key下拉框選擇初始過濾Key的類型,單擊圖標。初始過濾Key的類型:
- params[n]:方法的第n個參數。
- returnObj:方法的返回值。
- 方法執行耗時:方法執行的耗時。
- 是否拋出異常:方法執行時是否拋出異常。
說明 如果選取的初始過濾Key為嵌套類型,則還需要繼續選擇該嵌套類型的內部字段,直到選擇字段為基礎類型。 - 選擇過濾條件。
- 輸入過濾值。
- 單擊添加。
在當前過濾條件區域會顯示已添加的過濾條件。
- 在左側執行堆棧區域右上角單擊圖標,系統會按照設置的條件重新抓取一次方法執行。
- 左側執行堆棧區域顯示診斷方法的內部執行記錄。
對象查看器
對象查看器用于查看一些單例對象當前的狀態,用于排查應用狀態異常問題,例如應用配置、黑白名單、成員變量等。
- 在Arthas診斷頁面,單擊對象查看器頁簽。
- 在對象查看器頁簽的搜索框中輸入類名的關鍵詞,然后單擊搜索圖標。
- 在搜索到的類中選擇需要診斷的類,然后在右側實例選擇框選擇該類的某個實例,單擊確定。頁面則會顯示該實例中當前字段的實時取值。
- 對于簡單類型的字段,在左側對象字段實時取值區域的詳情列會是字段的取值。
- 對于復制類型的字段,在左側對象字段實時取值區域的詳情列單擊點擊查看詳情,在右側字段詳情區域查看字段取值詳情。
字段詳情區域僅支持將復雜類型字段反序列化一層進行展示,如果需要查看更具體的數據,單擊點擊查看字段更詳細的數據。
實時看板
實時看板用于查看系統中用到的關鍵組件的實時狀態,例如查看數據庫連接池的使用情況、HTTP連接池的使用情況等,有利于排查資源類型的問題。
- 在Arthas診斷頁面,單擊實時看板頁簽。
- 在實時看板頁簽的下拉列表中選擇一個看板,然后在右側實例選擇框選擇該看板的一個實例,單擊添加到看板。頁面顯示該看板的實時情況。如下圖顯示為一個Druid連接池的實時狀態信息,包括基礎配置、連接池狀態、執行耗時分布等。
性能分析
性能分析支持對CPU耗時、內存分配等對象進行一定時間的采樣并生成相應的火焰圖,幫助您快速定位應用的性能瓶頸。
- 在Arthas診斷頁面,單擊性能分析頁簽。
- 在性能分析頁簽下方,單擊新建火焰圖。
- 在新建火焰圖對話框,選擇火焰圖類型,輸入采樣時間和備注信息,然后單擊確認。
參數 描述 示例值 火焰圖類型 采樣對象的類型。取值: - cpu耗時
- 內存分配
- 鎖耗時
- itimer
cpu耗時 輸入采樣時間(單位:秒) 采樣的時長。取值:10~1800。 30 性能分析頁簽下方顯示已創建的火焰圖的任務信息,包括開始時間、采樣時間、備注信息、火焰圖類型和任務狀態。 - 在性能分析頁簽下方,找到任務記錄,在其右側任務狀態,單擊查看火焰圖,根據頁面提示下載SVG格式的火焰圖文件,然后在瀏覽器中打開。
Arthas Shell
通過命令行方式自定義Arthas診斷。
文檔內容是否對您有幫助?