Arthas
是Alibaba開源的Java診斷工具,主要解決以下問題:
- 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
- 我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
- 遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
- 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
- 是否有一個全局視角來查看系統的運行狀況?
- 有什么辦法可以監控到JVM的實時運行狀態
今天我們主要使用Arthas
的請求追蹤、反編譯以及接口參數監控。
一、Arthas
的下載。
1、先從官方git地址https://github.com/alibaba/arthas/blob/master/README_CN.md下載Arthas的jar包,然后執行java -jar 運行該jar包。如果覺得官網下載慢也可以直接在我分享的百度雲盤中下載(鏈接: https://pan.baidu.com/s/1sTyU03uSUObOxtW4RkPkNw&shfl=shareset 提取碼: drw1 )
二、Arthas的啟動。
Arthas啟動的前提是要啟動你的java項目,因為Arthas啟動時會自動掃描機器上運行的java項目,如下圖
三、常用命令
1、sc 命令,這個命令能搜索出所有已經加載到 JVM 中的 Class 信息
,
比如sc -d 打印該類的詳細信息
2、trace 命令,方法內部調用路徑,並輸出方法路徑上的每個節點上耗時,可以使用該命令來檢測接口里那一步耗時較多。注意:每次只能跟蹤一級方法的調用鏈路。
這時只需要調用接口就行,如下:
繼續追蹤getLaboratoryRelationship這個接口,查看里面方法的具體耗時:
四、watch命令,該命令能方便的觀察到指定方法的調用情況。能觀察到的范圍為:返回值
、拋出異常
、入參。
當然這只是Arthas的一小部分功能,如果還需要更詳細的介紹,請移步官方API文檔https://alibaba.github.io/arthas/index.html。