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應用。
-:接入Managed Service for OpenTelemetry的應用。
在左側導覽列中單擊應用設定,並在右側單擊自訂配置頁簽。
在自訂配置頁簽的Arthas監控地區,開啟Arthas開關,根據需求選擇是否僅對部分IP進行Arthas診斷,並添加目標IP。
在自訂配置頁簽左下角單擊儲存。
查看Arthas診斷資訊
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入Managed Service for 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診斷。