以前介紹過 BTrace,線上問題排查神器 BTrace 的使用,也說它是線上問題排查神器。都是神器,但今天這個也很厲害,是否是更厲害很差說,可是使用起來很是簡單。若是你用 BTrace 的話,須要事先寫好探測腳本,而後上傳到須要排查問題的服務器,而後執行命令。比方說獲取某個方法的參數、返回值、異常等。而 Athas 方便在不用寫腳本,直接用命令行方式就能夠,使用它就好像在用安裝在服務器上的各類工具同樣,好比 top、jps、jmap 等。html
他們背後的邏輯都是字節碼修改,若是你想了解,能夠讀一讀這篇Java 調試工具、熱部署、JVM 監控工具都用到了它java
誇了半天,Arthas 到底有什麼神奇的呢,有什麼功效呢。如下是摘自官方的介紹。git
Arthas 是Alibaba開源的Java診斷工具,深受開發者喜好。github
當你遇到如下相似問題而一籌莫展時,Arthas能夠幫助你解決:正則表達式
這個類從哪一個 jar 包加載的?spring
爲何會報各類類相關的 Exception?服務器
我改的代碼爲何沒有執行到?難道是我沒 commit?分支搞錯了?ide
遇到問題沒法在線上 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
詳細的命令介紹直接看官方文檔吧 。https://alibaba.github.io/arthas/quick-start.html
另外,不管是 Arthas 仍是 BTrace ,都是用來排查單機服務問題的,也就是應用內部的代碼、性能問題,若是要排查不一樣服務之間的調用問題,那就是另外一個維度上的事兒了。就須要 APM 的幫助了。