Arthas常用功能及一次線上問題排查

絲瓜呆呆發表於2022-05-16

一、Arthas簡介

Arthas是Alibaba開源的Java診斷工具,功能很強大,它是通過Agent方式來連線執行的Java程式、主要通過互動式來完成功能。

https://arthas.aliyun.com/doc/stack.html 

首先貼出官方文件,自己使用也不多,主要用於一次線上問題排查

二、執行

java -jar arthas-boot.jar ,執行Arthas

選擇要粘附的程式,輸入編號即可

 

 

使用以下兩個命令其中一個檢視java程式的程式號
ps -ef
jps

備註:也可以通過瀏覽器連線Arthas,只是執行命令的時候需要加--target-ip引數

 

三、dashboard

輸入以下命令進入儀表盤,監控執行緒,記憶體狀態,GC等資訊

 

 

四、thread

列印全部執行緒:thread

列印最忙的前10條執行緒: thread -n 10

根據執行緒號列印: thread 20

找出阻塞其他執行緒的執行緒 注意, 目前只支援找出synchronized關鍵字阻塞住的執行緒, 如果是java.util.concurrent.Lock, 目前還不支援。
thread -b

如果響應慢,阻塞狀態的執行緒比較多,我們需要重點關注

 

五、檢視已經載入的類(如果沒有程式碼許可權,使用jad)

sc com.XXX.sgw.controller.*
sc com.XXX.controller.AccessLogController

 

 

六、追蹤方法堆疊呼叫時間

跟蹤方法內部呼叫,輸出各個節點的耗時,主要用於響應慢的時候

trace comXXX.controller.api.ServiceGatewayV1Controller list
trace com.XXX.service.ServiceGatewayV1Service customizeQuery m -n 2 ,一般需要輸出多次結果,所以這裡可以通過-n指定結果數量

 

 

 

 

 

 

七、檢視程式呼叫出入參

類似於debug,檢視被測方法的引數和返回值

watch com.XXX.controller.api.ServiceGatewayV1Controller list "{params[0],params[1],returnObj}"
watch com.XXX.service.ServiceGatewayV1Service customizeQuery "{params[0],params[1],params[2],returnObj}"

 

 

八、回溯方法執行 

下面關注:耗時、IS-RET為false表示失敗

tt -t com.XXX.vo.PageVo getPageSize
tt -i 1037 -w "target.getPageSize()"

 

九、檢視方法被呼叫路徑

stack com.XXX.service.impl.PostgresqlServiceImpl customQuery

 

 

十、反編譯線上程式碼

jad --source-only com.yingzi.data.sgw.controller.api.ServiceGatewayV1Controller
jad --source-only com.yingzi.data.sgw.controller.api.ServiceGatewayV1Controller getDataByAlgorithm

 

十一、以3秒為一個時間視窗,統計時間視窗內呼叫次數,成功次數,失敗次數,平時RT時間。用於監控方法的執行情況
monitor -c 3 com.yingzi.data.sgw.controller.api.ServiceGatewayV1Controller list

 

 

十二、JVM

重點關注下死鎖(DEADLOCK-COUNT,下面不為0,表示有死鎖)

根據下面的棧資訊,可以看到,這兩個執行緒互相請求被對方佔用未釋放的資源導致了死鎖。舉個例子,現實中很少

 

 

十三、profiler(火焰圖)

系統cpu高的時候,我們可以看系統呼叫,相比於perf命令,profiler的步驟要更簡便點,

profiler start,啟動,預設是生成cpu的火焰圖,which event to trace (cpu, alloc, lock, cache-misses etc.), default value is cpu

profiler stop,停止,可以看到生成的svg檔案路徑

 

相關文章