最近發現一個好玩的東西給你們分享一下-阿里的Arthas 。在阿里巴巴內部,有不少自研工具供開發者使用,其中有一款工具,是幾乎每一個Java開發都使用過的工具,那就是Arthas,這是一款Java診斷工具,是一款牛逼帶閃電的工具。該工具已於2018年9月份開源。java
轉自做者:Java入門到入墳 | 連接:www.jianshu.com/p/25305a05b…git
GitHub地址: github.com/alibaba/art…github
用戶文檔:alibaba.github.io/arthas/面試
這個類從哪一個 jar 包加載的?爲何會報各類類相關的 Exception?shell
我改的代碼爲何沒有執行到?難道是我沒 commit?分支搞錯了?apache
遇到問題沒法在線上 debug,難道只能經過加日誌再從新發布嗎?session
線上遇到某個用戶的數據處理有問題,但線上一樣沒法 debug,線下沒法重現!jvm
是否有一個全局視角來查看系統的運行情況?函數
有什麼辦法能夠監控到JVM的實時運行狀態?工具
以上問題,統統能夠經過Arthas來進行問題診斷!!!是否是很好很強大。
Arthas支持JDK 6+,採用命令行交互模式,同時提供豐富的Tab自動補全功能,進一步方便進行問題的定位和診斷。
一、使用arthas-boot安裝
下載arthas-boot.jar,而後用java -jar的方式啓動:
打印幫助信息:
若是下載速度比較慢,可使用aliyun的鏡像:
二、使用as.sh安裝
Arthas 支持在 Linux/Unix/Mac 等平臺上一鍵安裝,請複製如下內容,並粘貼到命令行中,敲 回車 執行便可:
上述命令會下載啓動腳本文件 as.sh 到當前目錄,你能夠放在任何地方或將其加入到 $PATH 中。
直接在shell下面執行./as.sh,就會進入交互界面。
也能夠執行./as.sh -h來獲取更多參數信息。
1. 啓動Demo
arthas-demo是一個簡單的程序,每隔一秒生成一個隨機數,再執行質因式分解,並打印出分解結果。
2. 啓動arthas
在命令行下面執行:
執行該程序的用戶須要和目標進程具備相同的權限。好比以admin用戶來執行:sudo su admin && java -jar arthas-boot.jar或sudo -u admin -EH java -jar arthas-boot.jar。
若是attatch不上目標進程,能夠查看~/logs/arthas/目錄下的日誌。
若是下載速度比較慢,可使用aliyun的鏡像:java -jar arthas-boot.jar --repo-mirror aliyun --use-http
java -jar arthas-boot.jar -h打印更多參數信息。
選擇應用java進程:
Demo進程是第2個,則輸入2,再輸入回車/enter。Arthas會attach到目標進程上,並輸出日誌:
3. 查看dashboard
輸入dashboard,按enter/回車,會展現當前進程的信息,按ctrl+c能夠中斷執行。
4. 經過sysenv命令來獲取到進程的Main Class
5. 經過jad來反編繹Main Class
6. watch
經過watch命令來查看demo.MathGame#primeFactors函數的返回值:
5. 退出arthas
若是隻是退出當前的鏈接,能夠用quit或者exit命令。Attach到目標進程上的arthas還會繼續運行,端口會保持開放,下次鏈接時能夠直接鏈接上。
若是想徹底退出arthas,能夠執行shutdown命令。
基礎命令
help——查看命令幫助信息
cls——清空當前屏幕區域
session——查看當前會話的信息
reset——重置加強類,將被 Arthas 加強過的類所有還原,Arthas 服務端關閉時會重置全部加強過的類
version——輸出當前目標 Java 進程所加載的 Arthas 版本號
quit——退出當前 Arthas 客戶端,其餘 Arthas 客戶端不受影響
shutdown——關閉 Arthas 服務端,全部 Arthas 客戶端所有退出
keymap——Arthas快捷鍵列表及自定義快捷鍵
** jvm相關**
dashboard——當前系統的實時數據面板
thread——查看當前 JVM 的線程堆棧信息
jvm——查看當前 JVM 的信息
sysprop——查看和修改JVM的系統屬性
New! getstatic——查看類的靜態屬性
class/classloader相關
classloader——查看classloader的繼承樹,urls,類加載信息,使用classloader去getResource
monitor/watch/trace相關
請注意,這些命令,都經過字節碼加強技術來實現的,會在指定類的方法中插入一些切面來實現數據統計和觀測,所以在線上、預發使用時,請儘可能明確須要觀測的類、方法以及條件,診斷結束要執行 shutdown 或將加強過的類執行 reset 命令。
options
options——查看或設置Arthas全局開關
管道
Arthas支持使用管道對上述命令的結果進行進一步的處理,如sm org.apache.log4j.Logger | grep
以上,就是關於Arthas的簡單介紹,要想真正的融會貫通,真正的把他做爲一個排查問題的利器,還須要本身動手實踐下!所謂實踐出真知。
###閱讀更多
在這裏得到的不只僅是技術!