Java診斷工具Arthas
1. Arthas簡介
Arthas是阿裡開源的一個線上java診斷工具,發現阿裡還是挺喜歡開源一些技術的,造福人類。昨天試用了一下,發現真是強大,解決了我工作兩年的很多困擾,有點相見恨晚的感覺。
根據官網的說明,它能解決下面的問題:
這個類從哪個 jar 包加載的?為什麼會報各種類相關的 Exception?
我改的代碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
遇到問題無法線上上 debug,難道隻能通過加日志再重新釋出嗎?
線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重制!
是否有一個全局視角來檢視系統的運作狀況?
有什麼辦法可以監控到JVM的實時運作狀态?
Arthas采用指令行互動模式,同時提供豐富的 Tab 自動補全功能,進一步友善進行問題的定位和診斷。
2. Arthas安裝
在Linux下直接執行curl -L https://alibaba.github.io/arthas/install.sh | sh,然後執行./as.sh就可以進入到Arthas的指令行界面。
3. Arthas試用
安裝完後試用了它的監控相關的功能,以後調試就不那麼麻煩了。
Arthas的大多指令格式
指令+[參數]+類路徑+方法名+[參數]
[參數]根據具體指令可有可無
下面說一下我常用的基本指令:
- help 檢視指令幫助,eg:help getstatic
- cls 清屏
- quit 退出目前Arthas用戶端
- shutdown 退出所有打開的Arthas用戶端
下面說一下我常用的基本參數:
- -n 限制列印的條數,如程式執行中,可能有些方法會瘋狂列印。
- -i 設定列印間隔時間,機關毫秒
- -x 屬性周遊深度,預設為1。
常用表達式:
- * 任意多個任意字元
- #cost 消耗的時間
進入指令行界面,剛進入的時候會顯示所有的java程序,選擇對應的數字然後回車就可以進入到對應的程序中

3.1 jad指令
3.2 watch指令
watch可以監控某個方法的出入參,異常資訊等。
# -x表示周遊深度,可以調整來列印具體的參數和結果内容,預設值是1。
-b表示在方法調用之前觀察 -s表示方法調用之後觀察 -n 表示觀察次數
3.3 trace指令
trace可以輸出方法内部調用關系,并列印方法内部每個調用的耗時。
# 列印setOrganizeAuth方法内每個調用的耗時
3.4 stack指令
stack可以輸出方法的整個調用路徑。
# 列印save方法的整個調用路徑(不抛出堆棧也能看到調用鍊啦!)
3.5 tt指令
記錄方法每次的調用出入參和異常資訊,并且完整保留調用現場,可以再次模拟調用。
# 記錄每次調用queryCatalog的情況,可以根據其他指令列印出入餐和複現現場
參考部落格:http://www.pianshen.com/article/713480172/
官方文檔位址:https://alibaba.github.io/arthas/advanced-use.html