Arthas是什麼鬼?
Arthas是一款阿裡巴巴開源的 Java 線上診斷工具,功能非常強大,可以解決很多線上不友善解決的問題。
Arthas診斷使用的是指令行互動模式,支援JDK6+,Linux、Mac、Windows 作業系統,指令還支援使用 tab 鍵對各種資訊的自動補全,診斷起來非常利索。
這是它的官方網站:
https://alibaba.github.io/arthas/index.html Github位址: https://github.com/alibaba/arthasArthas能解決什麼問題?
讓我們來看下 Arthas 的官方解釋。
當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
1、這個類從哪個 jar 包加載的?為什麼會報各種類相關的 Exception?
2、我改的代碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
3、遇到問題無法線上上 debug,難道隻能通過加日志再重新釋出嗎?
4、線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重制!
5、是否有一個全局視角來檢視系統的運作狀況?
6、有什麼辦法可以監控到JVM的實時運作狀态?
看完是不是覺得太牛逼了?
特别是它可以線上反編譯類,可以不用加日志線上調試跟蹤問題代碼。
既然這麼牛逼,肯定有不少公司在使用吧,下面列出了官方給出的使用登入順序圖。

快速安裝
官方推薦使用 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![]()
推薦一款阿裡開源的 Java 診斷工具,好用到爆!
4、sm
檢視已加載類的方法資訊。
$ sm -d cn.javastack.springbootbestpractice.SpringBootBestPracticeApplication main![]()
推薦一款阿裡開源的 Java 診斷工具,好用到爆!
5、jad
反編譯指定已加載類的源代碼。
$ jad cn.javastack.springbootbestpractice.SpringBootBestPracticeApplication
6、trace
顯示方法内部調用路徑,非實時傳回的指令并輸出方法路徑上的總耗時,以及的每個節點上的詳細耗時。
$ trace -j cn.javastack.springbootbestpractice.web.JsonTest getUserInfo![]()
推薦一款阿裡開源的 Java 診斷工具,好用到爆! -j:表示跳過 JDK 中的方法路徑。
7、monitor
對某個方法的調用進行定時監控。
$ monitor cn.javastack.springbootbestpractice.web.JsonTest getUserInfo -c 5
![]()
推薦一款阿裡開源的 Java 診斷工具,好用到爆!
-c 5:表示每5秒統計一次,統計周期,預設值為120秒。
監控次元說明:![]()
推薦一款阿裡開源的 Java 診斷工具,好用到爆!
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總結
總結下來,使用 Arthas 可以很友善的診斷一個 Java 應用程式,如:系統資料面闆、JVM實時運作狀态、類加載情況、監控方法執行情況、顯示方法執行路徑等。
Arthas這些實用的功能确實可以幫助我們解決一些常見的線上問題,也能獨立于應用程式代碼,但僅局限于在一個 JVM 程序内,如果是分布式系統,Arthas就有點難了。
好了,今天的文章就到這了,你們也在用 Arthas 嗎?歡迎留言分享使用心得,如果覺得文章不錯,也可以分享給你的同學、同僚們。