摘自Arthas的Github介紹:java
Arthas is a Java Diagnostic tool open sourced by Alibaba.git
Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.程序員
大意爲:Arthas是阿里開源的一個Java診斷工具,能夠幫助開發人員在不修改代碼或重啓服務器的狀況下快速定位線上問題。github
聽起來確實是咱們的程序員的一大福利。好比,咱們就遇到一種狀況,Spring Boot應用中有個cron定時任務爲天天凌晨1點啓動執行,可是測試起來很不方便,總不能每次修改cron時間來讓QC測試吧?這樣雖然是方便了測試妹子,可是卻徒增了咱們開發時間和迭代次數啊!!!那Arthas究竟是否可以知足咱們需求呢?Go on...shell
wget https://alibaba.github.io/arthas/arthas-boot.jar
複製代碼
此時在你當前所在目錄下會有個arthas-boot.jar
包。vim
嘗試下arthas:bash
# 啓動arthas,會進入命令行交互狀態
java -jar arthas-boot.jar
# 查看arthas命令手冊
java -jar arthas-boot.jar -h
複製代碼
# 該命令會下載 as.sh 到當前目錄下
curl -L https://alibaba.github.io/arthas/install.sh | sh
複製代碼
嘗試下arthas:服務器
# 啓動arthas,會進入命令行交互狀態
./as.sh
# 查看arthas命令手冊
./as.sh -h
複製代碼
下面演示咱們以as.sh
爲主。app
首先咱們啓動arthas,會查看到咱們當前server上部署的應用已經被探測到,當前個人server上只有一個應用程序,只需輸入數字1,便可和該應用進行交互:curl
dashboard
命令能夠實時查看應用監控數據thread
命令查看應用程序中全部線程狀況經過thread threadId
命令查看指定線程狀態信息
經過watch
命令去查看方法的參數、返回值和異常信息
經過sc
命令查看類的信息
sc yourFullClassName
sc -d yourFullClassName*
去查看JVM加載的類信息sc *yourClassName*
去查看JVM加載的類信息經過sm
命令查看類的方法信息
sm java.math.RoundingMode
sm -d java.math.RoundingMode
sm java.math.RoundingMode <init>
經過jad yourFullClassName
去查看反編譯後的完整代碼信息
經過jad --source-only yourFullClassName > /tmp/yourClassName.java
導出反編譯代碼到臨時目錄
經過vim /tmp/yourClassName.java
進行編輯修改代碼
經過sc -d *yourClassName | grep classLoaderHash
獲取加載yourClassName的類加載器
經過mc -c classLoaderHash /tmp/yourClassName.java -d /tmp
從新用相同類加載器從新編譯修改後的類(mc: Memory Compiler)
經過redefine /tmp/yourFullClassName.class
從新加載新的被編譯的類文件