Arthas-阿里開源的 Java 診斷工具


Arthas是什么鬼?

Arthas是一款阿里巴巴開源的 Java 線上診斷工具,功能非常強大,可以解決很多線上不方便解決的問題。

Arthas診斷使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系統,命令還支持使用 tab 鍵對各種信息的自動補全,診斷起來非常利索。

這是它的官方網站:

https://alibaba.github.io/arthas/index.html

Github地址:

https://github.com/alibaba/arthas

Arthas能解決什么問題?

讓我們來看下 Arthas 的官方解釋。

當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決: 1、這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception? 2、我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了? 3、遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎? 4、線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!5、是否有一個全局視角來查看系統的運行狀況? 6、有什么辦法可以監控到JVM的實時運行狀態? Arthas官網

看完是不是覺得太牛逼了?

特別是它可以在線反編譯類,可以不用加日志在線調試跟蹤問題代碼。

既然這么牛逼,肯定有不少公司在使用吧,下面列出了官方給出的使用登錄順序圖。

Alibaba Alipay Aliyun Taobao Tmall 微醫 卓越教育 狐狸金服 三體雲 證大文化 連連支付 Acmedcare+ 好慷 來電科技 四格互聯 ICBC 陸鷹 玩友時代 她社區 龍騰出行 foscam 二維火 lanxum 納里健康 掌門1對1 offcn sia 振安資產 菠蘿 中通快遞 光點科技 廣州工程技術職業學院 mstar xwbank imexue keking secoo viax yanedu duia 哈啰出行 hollycrm citycloud yidianzixun 神州租車 天眼查 商脈雲 三新文化 雪球財經 百安居 安心保險 杭州源誠科技 91moxie 智慧開源 富佳科技 鼎尖軟件 廣通軟件 九鼎瑞信 小米有品 歐冶雲商 投投科技 餓了么 58同城 上海浪沙 符律科技 順豐科技 新致軟件 北京華宇信息 太平洋保險 旅享網絡 水滴互聯 貝殼找房 嘟嘟牛 雲冪信息 隨手科技 媽媽去哪兒 雲實信息 BBD數聯銘品 伙伴集團 數夢工場

快速安裝

官方推薦使用 arthas-boot 進行安裝,非常方便,以下是基於 Linux 系統環境進行演示,一般解決線上問題也是基於 Linux 環境。

第一步:下載

在任何目錄下載 arthas-boot 這個包。

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

[root@VM_0_7_centos ~]# wget https://alibaba.github.io/arthas/arthas-boot.jar
--2019-07-30 14:48:31--  https://alibaba.github.io/arthas/arthas-boot.jar
Resolving alibaba.github.io (alibaba.github.io)... 185.199.108.153, 185.199.109.153, 185.199.110.153, ...
Connecting to alibaba.github.io (alibaba.github.io)|185.199.108.153|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 98637 (96K) [application/java-archive]
Saving to: ‘arthas-boot.jar’

100%[==========================================================================================================>] 98,637      32.8KB/s   in 2.9s   

2019-07-30 14:48:36 (32.8 KB/s) - ‘arthas-boot.jar’ saved [98637/98637]

第二步:運行

使用 java -jar 命令執行 arthas-boot 包。

java -jar arthas-boot.jar

[INFO] arthas-boot version: 3.1.1
[INFO] Found existing java process, please choose one and hit RETURN.
* [1]: 13062 spring-boot-best-practice-0.0.1-SNAPSHOT.jar

第三步:選擇進程

運行 arthas-boot 后,控制台會顯示所有 Java 進程,選擇一個你需要診斷的進程。

如第二步所示,這里有只有一個 Java 進程,輸入序號1,回車,Arthas會附到目標進程上,並輸出日志:

[INFO] Start download arthas from remote server: https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.1.1/arthas-packaging-3.1.1-bin.zip
[INFO] Download arthas success.
[INFO] arthas home: /root/.arthas/lib/3.1.1/arthas
[INFO] Try to attach process 13062
[INFO] Attach process 13062 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                           
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                          


wiki      https://alibaba.github.io/arthas                                      
tutorials https://alibaba.github.io/arthas/arthas-tutorials                     
version   3.1.1                                                                 
pid       13062                                                                 
time      2019-07-30 14:49:34

至此,安裝、啟動完成。

更多其他安裝方式見:https://alibaba.github.io/arthas/install-detail.html

實戰使用

啟動完成后,當前光標會進入 arthas 的控制台,接受各種操作命令。

下面,棧長會做幾個常用命令的演示,讓大家對它有一個基本的認識和快速上手的能力。

1、dashboard

顯示當前系統的實時數據面板,按 ctrl+c 即可退出。

$ dashboard

 

2、thread

查看當前 JVM 的線程堆棧信息。

thread id, 顯示指定線程的運行堆棧:

$ thread 20

 

顯示當前最忙的前N個線程並打印堆棧:

$ thread -n 3

3、sc

查看 JVM 已加載的類詳細信息。

$ sc -d *Test

 

4、sm

查看已加載類的方法信息。

$ sm -d cn.javastack.springbootbestpractice.SpringBootBestPracticeApplication main

 

5、jad

反編譯指定已加載類的源代碼。

$ jad cn.javastack.springbootbestpractice.SpringBootBestPracticeApplication

 

6、trace

顯示方法內部調用路徑,非實時返回的命令並輸出方法路徑上的總耗時,以及的每個節點上的詳細耗時。

$ trace -j cn.javastack.springbootbestpractice.web.JsonTest getUserInfo

 

-j:表示跳過 JDK 中的方法路徑。

7、monitor

對某個方法的調用進行定時監控。

$ monitor cn.javastack.springbootbestpractice.web.JsonTest getUserInfo -c 5

 

 

-c 5:表示每5秒統計一次,統計周期,默認值為120秒。

監控維度說明:

監控項 說明
timestamp 時間戳
class 類名
method 方法名
total 調用次數
success 成功次數
fail 失敗次數
rt 平均響應時間
fail-rate 失敗率

8、watch

觀測方法執行數據,能方便的觀察到指定方法的調用情況,如:返回值、拋出異常、入參等。

$ watch cn.javastack.springbootbestpractice.web.JsonTest getUserInfo '{params, returnObj}' -x 2 -b

 

 

以上監控的是一個方法的入參情況,在方法執行前監控:-b,遍歷深度:-x 2。

9、quit/exit

退出當前 Arthas。

這個命令僅退出當前連接的客戶端,附到目標進程上的 Arthas 會繼續運行,端口不會關閉,下次連接時可以直接連接使用。

10、shutdown

關閉 Arthas 服務端,退出所有 Arthas 客戶端。

以上演示了 10 個命令的基本使用,各種命令的使用詳情可以在命令帶 --help 進行查閱。

 

 

更多其他命令請參考:

https://alibaba.github.io/arthas/commands.html

 


免責聲明!

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



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