什麼是Arthas呢?
Arthas 是一款阿里推出的線上監控診斷產品,通過全域性視角實時檢視應用 load、記憶體、gc、執行緒的狀態資訊,並能在不修改應用程式碼的情況下,對業務問題進行診斷,包括檢視方法呼叫的出入參、異常,監測方法執行耗時,類載入資訊等,大大提升線上問題排查效率。
那我們為什麼要使用Arthas?
當我們定位線上bug時,無法定位到具體位置時,我們就可以使用Arthas來檢視方法的出入參、方法的呼叫鏈路、以及內部方法報錯、反編譯class檔案等等方式來精確定位到問題的位置。
windows下載
安裝目錄
Linux下載
curl -O https://arthas.aliyun.com/arthas-boot.jar
啟動Arthas使用者端
java -jar arthas-boot.jar
選擇對應的監聽服務
秒
分:秒
watch [類全路徑名] [方法名] [參數列....]
栗子:
watch com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource {'params, returnObj'} -x 3
引數名稱 | 引數說明 |
---|---|
class-pattern | 類名錶示式匹配 |
method-pattern | 函數名錶示式匹配 |
express | 觀察表示式,預設值:{params, target, returnObj} |
condition-express | 條件表示式 |
[b] | 在函數呼叫之前觀察 |
[e] | 在函數異常之後觀察 |
[s] | 在函數返回之後觀察 |
[f] | 在函數結束之後(正常返回和異常返回)觀察 |
[E] | 開啟正規表示式匹配,預設為萬用字元匹配 |
[x:] | 指定輸出結果的屬性遍歷深度,預設為 1,最大值是 4 |
watch
雖然很方便和靈活,但需要提前想清楚觀察表示式的拼寫,這對排查問題而言要求太高,因為很多時候我們並不清楚問題出自於何方,只能靠蛛絲馬跡進行猜測。
這個時候如果能記錄下當時方法呼叫的所有入參和返回值、丟擲的異常會對整個問題的思考與判斷非常有幫助。
於是乎,TimeTunnel 命令就誕生了。
tt -t com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
tt -i 1000
表格欄位 | 欄位解釋 |
---|---|
INDEX | 時間片段記錄編號,每一個編號代表著一次呼叫,後續 tt 還有很多命令都是基於此編號指定記錄操作,非常重要。 |
TIMESTAMP | 方法執行的本機時間,記錄了這個時間片段所發生的本機時間 |
COST(ms) | 方法執行的耗時 |
IS-RET | 方法是否以正常返回的形式結束 |
IS-EXP | 方法是否以拋異常的形式結束 |
OBJECT | 執行物件的hashCode() ,注意,曾經有人誤認為是物件在 JVM 中的記憶體地址,但很遺憾他不是。但他能幫助你簡單的標記當前執行方法的類實體 |
CLASS | 執行的類名 |
METHOD | 執行的方法名 |
trace
命令能主動搜尋 class-pattern
/method-pattern
對應的方法呼叫路徑,渲染和統計整個呼叫鏈路上的所有效能開銷和追蹤呼叫鏈路,也就是對監控的方法和方法內部的呼叫鏈路進行耗時統計。
# 命令格式
trace [引數] [類全路徑名] [方法名]
trace --skipJDKMethod false com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
引數說明
引數名稱 | 引數說明 |
---|---|
class-pattern | 類名錶示式匹配 |
method-pattern | 方法名錶示式匹配 |
condition-express | 條件表示式 |
[E] | 開啟正規表示式匹配,預設為萬用字元匹配 |
[n:] |
命令執行次數 |
#cost |
方法執行耗時 |
[m <arg>] |
指定 Class 最大匹配數量,預設值為 50。長格式為[maxMatch <arg>] 。 |
jad
命令將 JVM 中實際執行的 class 的 byte code 反編譯成 java 程式碼,便於你理解業務邏輯;
# 命令格式
jad [引數] [類全路徑名] [方法名]
jad --source-only com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
引數說明
引數名稱 | 引數說明 |
---|---|
class-pattern | 類名錶示式匹配 |
[c:] |
類所屬 ClassLoader 的 hashcode |
[classLoaderClass:] |
指定執行表示式的 ClassLoader 的 class name |
[E] | 開啟正規表示式匹配,預設為萬用字元匹配 |
參考部落格: