Arthas是診斷Java領域線上問題的利器,利用字節碼增強技術,可以在不重啟JVM進程的情況下,查看程序的運行情況。
ARMS 100%集成Arthas的所有能力,且相比自行掛載使用有如下優勢:
不依賴JDK環境,您無需下載安裝Arthas,可按需批量一鍵開啟/關閉。
常用功能白屏化,免去記命令、查命令、寫表達式的煩惱。
和ARMS上下文關聯,通過Trace命令可以看到ARMS的鏈路TraceID。
前提條件
僅應用監控專家版支持Arthas診斷功能。
Arthas診斷功能建議只在排查問題時開啟,在日常使用時建議關閉。
ARMS Agent版本為v2.7.1.3或以上。
已接入應用監控。具體操作,請參見應用監控概述。
應用的編程語言需要為Java。
背景信息
ARMS提供的Arthas診斷功能主要用于補齊ARMS在實時診斷方面的能力。ARMS的Arthas診斷功能包括以下幾種類型:
JVM概覽:查看當前JVM進程實時的內存使用情況、系統信息、系統變量和環境變量。
線程耗時分析:查看當前JVM進程的線程耗時情況以及指定線程的實時方法棧。
方法執行分析:抓取任意方法(非JDK方法)滿足指定條件的一次執行記錄,記錄該方法的參數、異常、返回值以及方法內部各個方法執行耗時。
對象查看器:查看任意類的某個實例實時的屬性取值情況。
實時看板:常見組件的實時看板,例如,Druid連接池的實時看板可以看到連接池的配置、使用情況以及SQL執行耗時情況。
Arthas Shell:通過命令行方式使用Arthas診斷。
Arthas性能分析已經全面升級為持續剖析功能,使用更加便捷,功能更加強大,可常態化開啟,隨時使用。
持續剖析功能可以有效發現Java程序中因CPU、內存和IO導致的瓶頸問題,并且按照方法名稱、類名稱和行號進行細分統計,最終協助開發者優化程序、降低延遲、增加吞吐量、節約成本。更多信息,請參見接入持續剖析功能。
開通Arthas診斷功能
登錄ARMS控制臺,在左側導航欄選擇 。
在應用列表頁面頂部選擇目標地域,然后單擊目標應用名稱。
說明語言列的圖標含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入可觀測鏈路 OpenTelemetry 版的應用。
在左側導航欄中單擊應用設置,并在右側單擊自定義配置頁簽。
在自定義配置頁簽的Arthas監控區域,打開Arthas開關,根據需求選擇是否僅對部分IP進行Arthas診斷,并添加目標IP。
在自定義配置頁簽左下角單擊保存。
查看Arthas診斷信息
登錄ARMS控制臺,在左側導航欄選擇 。
在應用列表頁面頂部選擇目標地域,然后單擊目標應用名稱。
說明語言列的圖標含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入可觀測鏈路 OpenTelemetry 版的應用。
在左側導航欄,選擇 。
在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診斷頁面,單擊方法執行分析頁簽。
在方法執行分析頁簽的搜索框中輸入類名的關鍵詞,然后單擊圖標。
在搜索到的類中選擇需要診斷的類,然后在右側方法選擇框選取該類的某個方法,單擊確定。
頁面將會顯示ARMS隨機抓取的該方法的某一次執行的信息。
左側執行堆棧區域顯示診斷方法的內部執行記錄。
如需鉆入某個內部方法,在其右側操作列,單擊鉆入。
如需查看方法源碼,單擊執行堆棧區域頂部的查看方法源碼。
如下圖所示,每一次內部方法的執行耗時都會以注釋的方式顯示在源代碼中。
右側方法執行結果區域顯示方法執行的參數值、返回值、異常、成員變量以及此次方法執行的TraceID。
右側設置執行條件區域執行以下步驟,可以設置方法執行條件來抓取滿足條件的方法執行記錄。
選擇當前方法中的一個重載方法。
在請選擇初始過濾key下拉框選擇初始過濾Key的類型,單擊圖標。
初始過濾Key的類型:
params[n]:方法的第n個參數。
returnObj:方法的返回值。
方法執行耗時:方法執行的耗時。
是否拋出異常:方法執行時是否拋出異常。
說明如果選取的初始過濾Key為嵌套類型,則還需要繼續選擇該嵌套類型的內部字段,直到選擇字段為基礎類型。
選擇過濾條件。
輸入過濾值。
單擊添加。
在當前過濾條件區域會顯示已添加的過濾條件。
在左側執行堆棧區域右上角單擊圖標,系統會按照設置的條件重新抓取一次方法執行。
對象查看器
對象查看器用于查看一些單例對象當前的狀態,用于排查應用狀態異常問題,例如應用配置、黑白名單、成員變量等。
在Arthas診斷頁面,單擊對象查看器頁簽。
在對象查看器頁簽的搜索框中輸入類名的關鍵詞,然后單擊搜索圖標。
在搜索到的類中選擇需要診斷的類,然后在右側實例選擇框選擇該類的某個實例,單擊確定。
頁面則會顯示該實例中當前字段的實時取值。
對于簡單類型的字段,在左側對象字段實時取值區域的詳情列會是字段的取值。
對于復制類型的字段,在左側對象字段實時取值區域的詳情列單擊點擊查看詳情,在右側字段詳情區域查看字段取值詳情。
字段詳情區域僅支持將復雜類型字段反序列化一層進行展示,如果需要查看更具體的數據,單擊點擊查看字段更詳細的數據。
實時看板
實時看板用于查看系統中用到的關鍵組件的實時狀態,例如查看數據庫連接池的使用情況、HTTP連接池的使用情況等,有利于排查資源類型的問題。
在Arthas診斷頁面,單擊實時看板頁簽。
在實時看板頁簽的下拉列表中選擇一個看板,然后在右側實例選擇框選擇該看板的一個實例,單擊添加到看板。
頁面顯示該看板的實時情況。如下圖顯示為一個Druid連接池的實時狀態信息,包括基礎配置、連接池狀態、執行耗時分布等。
Arthas Shell
通過命令行方式自定義Arthas診斷。