線上診斷神器-arthas基本應用

2023-04-20 18:02:30

Arthas基本應用

一、Arthas作用

什麼是Arthas呢?

​ Arthas 是一款阿里推出的線上監控診斷產品,通過全域性視角實時檢視應用 load、記憶體、gc、執行緒的狀態資訊,並能在不修改應用程式碼的情況下,對業務問題進行診斷,包括檢視方法呼叫的出入參、異常,監測方法執行耗時,類載入資訊等,大大提升線上問題排查效率。

那我們為什麼要使用Arthas?

​ 當我們定位線上bug時,無法定位到具體位置時,我們就可以使用Arthas來檢視方法的出入參、方法的呼叫鏈路、以及內部方法報錯、反編譯class檔案等等方式來精確定位到問題的位置。

二、安裝Arthas

windows下載

windows最新版本安裝地址

安裝目錄

Linux下載

curl -O https://arthas.aliyun.com/arthas-boot.jar

啟動Arthas使用者端

java -jar arthas-boot.jar

選擇對應的監聽服務

三、基本命令

3.1 dashboard命令

  • ID: Java 級別的執行緒 ID,注意這個 ID 不能跟 jstack 中的 nativeID 一一對應。
  • NAME: 執行緒名
  • GROUP: 執行緒組名
  • PRIORITY: 執行緒優先順序, 1~10 之間的數位,越大表示優先順序越高
  • STATE: 執行緒的狀態
  • CPU%: 執行緒的 cpu 使用率。比如取樣間隔 1000ms,某個執行緒的增量 cpu 時間為 100ms,則 cpu 使用率=100/1000=10%
  • DELTA_TIME: 上次取樣之後執行緒執行增量 CPU 時間,資料格式為
  • TIME: 執行緒執行總 CPU 時間,資料格式為分:秒
  • INTERRUPTED: 執行緒當前的中斷位狀態
  • DAEMON: 是否是 daemon 執行緒

3.2 watch命令

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

3.3 tt命令

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 執行的方法名

3.4 trace命令

trace 命令能主動搜尋 class-patternmethod-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>]

3.5 jad命令

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] 開啟正規表示式匹配,預設為萬用字元匹配

參考部落格:

arthas官網