線上問題排查神器 Arthas


線上問題排查神器 Arthas

之前介紹過 BTrace,線上問題排查神器 BTrace 的使用,也說它是線上問題排查神器。都是神器,但今天這個也很厲害,是不是更厲害不好說,但是使用起來非常簡單。如果你用 BTrace 的話,需要事先寫好探測腳本,然后上傳到需要排查問題的服務器,然后執行命令。比方說獲取某個方法的參數、返回值、異常等。而 Athas 方便在不用寫腳本,直接用命令行方式就可以,使用它就好像在用安裝在服務器上的各種工具一樣,比如 top、jps、jmap 等。

他們背后的邏輯都是字節碼修改,如果你想了解,可以讀一讀這篇Java 調試工具、熱部署、JVM 監控工具都用到了它

誇了半天,Arthas 到底有什么神奇的呢,有什么功效呢。以下是摘自官方的介紹。

Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛。

當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

這個類從哪個 jar 包加載的?

為什么會報各種類相關的 Exception?

我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?

遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?

線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!

是否有一個全局視角來查看系統的運行狀況?

有什么辦法可以監控到JVM的實時運行狀態?

Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。

看到上面的介紹是不是有種發現新大陸的感覺,恨不得拍拍大腿。心里在想,要是早知道它,之前就不用為了一個詭異的線上 bug 重復發包打日志了。

不管你現在用不用得上,都請記住它吧,相信我,遲早會用的上的。

安裝與啟動

先遠程到目標服務器上,然后執行以下命令安裝並運行

wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

然后 Arthas 會列出當前服務器上的所有 Java 進程。

Arthas fengzheng$ java -jar arthas-boot.jar 
[INFO] arthas-boot version: 3.1.1
[INFO] Found existing java process, please choose one and hit RETURN.
* [1]: 95301 org.kite.CmApplication
  [2]: 95300 org.jetbrains.jps.cmdline.Launcher
  [3]: 87737 org.kite.WdApplication

比如你想檢查 org.kite.WdApplication 這個應用的問題,那么輸入數字 3 回車,會出現如下提示,並開始正式與目標應用交互。

正式交互開始,就到了大展拳腳的時候了,線上出現的問題基本上都可以找到合適的命令。

下面簡單的介紹幾個,就是為了演示一下使用方式。

monitor

## 監控 MonitorController 類下的 overview 方法
monitor -c 5 kite.springcloud.jxm.controller.MonitorController overview
## 監控 kite.springcloud.jxm.service package 下所有了類的所有方法 *是通配符 也可以是正則表達式
monitor -c 60 kite.springcloud.jxm.service.* *

-c 為執行周期,默認120 秒,例如 -c 5 表示 5 秒鍾輸出一次,-c 60 表示 60 秒輸出一次。

watch

## 方法執行前 打印參數 
watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{params}" -b -n 1
## 方法返回后 打印返回值
watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{returnObj}" -s -n 1
## 方法返回后 打印所在的 ClassLoader、所在的類、調用實例
watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{loader,clazz,target}" -s -n 1
## 打印耗時超過 200ms 方法的參數和返回值
watch kite.springcloud.jxm.service.MonitorDashboardService * '{params, returnObj}' '#cost>200'

trace

方法內部調用路徑,並輸出方法路徑上的每個節點上耗時

trace kite.springcloud.jxm.controller.MonitorController overview

# 多個類 模擬實現多穿鏈路 trace
trace -E kite.springcloud.jxm.controller.MonitorController|kite.springcloud.jxm.service.MonitorDashboardService overview

stack

輸出當前方法被調用的調用路徑

stack kite.springcloud.jxm.controller.MonitorController overview
stack kite.springcloud.jxm.service.MonitorDashboardService overview  -n 1

詳細的命令介紹直接看官方文檔吧 。

另外,無論是 Arthas 還是 BTrace ,都是用來排查單機服務問題的,也就是應用內部的代碼、性能問題,如果要排查不同服務之間的調用問題,那就是另一個維度上的事兒了。就需要 APM 的幫助了。

不要吝惜你的「推薦」呦

歡迎關注,不定期更新本系列和其他文章
古時的風箏 ,進入公眾號可以加入交流群


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM