天天看點

JAVA線上排查問題的利器--Arthas

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程序,選擇對應的數字然後回車就可以進入到對應的程序中

JAVA線上排查問題的利器--Arthas

3.1 jad指令

JAVA線上排查問題的利器--Arthas

3.2 watch指令

watch可以監控某個方法的出入參,異常資訊等。

# -x表示周遊深度,可以調整來列印具體的參數和結果内容,預設值是1。

  -b表示在方法調用之前觀察 -s表示方法調用之後觀察 -n 表示觀察次數

JAVA線上排查問題的利器--Arthas

3.3 trace指令

trace可以輸出方法内部調用關系,并列印方法内部每個調用的耗時。

# 列印setOrganizeAuth方法内每個調用的耗時

JAVA線上排查問題的利器--Arthas

3.4 stack指令

stack可以輸出方法的整個調用路徑。

# 列印save方法的整個調用路徑(不抛出堆棧也能看到調用鍊啦!)

JAVA線上排查問題的利器--Arthas

3.5 tt指令

記錄方法每次的調用出入參和異常資訊,并且完整保留調用現場,可以再次模拟調用。

# 記錄每次調用queryCatalog的情況,可以根據其他指令列印出入餐和複現現場

JAVA線上排查問題的利器--Arthas
JAVA線上排查問題的利器--Arthas

參考部落格:http://www.pianshen.com/article/713480172/

官方文檔位址:https://alibaba.github.io/arthas/advanced-use.html

繼續閱讀