愛上Java診斷利器之Arthas

1. Arthas是什麼?

摘自Arthas的Github介紹:java

Arthas is a Java Diagnostic tool open sourced by Alibaba.

Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.

大意爲:Arthas是阿里開源的一個Java診斷工具,能夠幫助開發人員在不修改代碼或重啓服務器的狀況下快速定位線上問題。git

聽起來確實是咱們的程序員的一大福利。好比,咱們就遇到一種狀況,Spring Boot應用中有個cron定時任務爲天天凌晨1點啓動執行,可是測試起來很不方便,總不能每次修改cron時間來讓QC測試吧?這樣雖然是方便了測試妹子,可是卻徒增了咱們開發時間和迭代次數啊!!!那Arthas究竟是否可以知足咱們需求呢?Go on...程序員

2. 開啓Arthas之旅

2.1 安裝Arthas

  • 方式1:下載arthas-boot.jar包的方式
wget https://alibaba.github.io/arthas/arthas-boot.jar

此時在你當前所在目錄下會有個 arthas-boot.jar 包。github

嘗試下arthas:shell

# 啓動arthas,會進入命令行交互狀態
java -jar arthas-boot.jar

# 查看arthas命令手冊
java -jar arthas-boot.jar -h

  • 方式2:經過as.sh安裝Arthas(強烈推薦
# 該命令會下載 as.sh 到當前目錄下
curl -L https://alibaba.github.io/arthas/install.sh | sh

嘗試下arthas:vim

# 啓動arthas,會進入命令行交互狀態
./as.sh

# 查看arthas命令手冊
./as.sh -h

2.2 開始使用

下面演示咱們以 as.sh 爲主。服務器

首先咱們啓動arthas,會查看到咱們當前server上部署的應用已經被探測到,當前個人server上只有一個應用程序,只需輸入數字1,便可和該應用進行交互:app

2.2.1 基礎命令

  • 經過 dashboard 命令能夠實時查看應用監控數據

  • 經過 thread 命令查看應用程序中全部線程狀況


其中第一列爲線程的ID。curl

  • 經過 thread threadId 命令查看指定線程狀態信息工具

    • 好比咱們要查看線程ID爲506的線程狀態信息:

  • 固然,由於是命令行交互,也是支持管道流式操做:

  • 經過 watch 命令去查看方法的參數、返回值和異常信息
  • 經過 sc 命令查看類的信息

    • 經過 sc yourFullClassName

  • 經過 sc -d yourFullClassName* 去查看JVM加載的類信息

  • 經過 sc *yourClassName* 去查看JVM加載的類信息

  • 經過 sm 命令查看類的方法信息

    • case 1: sm java.math.RoundingMode

  • case 2: sm -d java.math.RoundingMode

  • case 3: sm java.math.RoundingMode <init>

2.2.2 重頭戲命令

  • 經過 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 從新加載新的被編譯的類文件

2.2.3 更多操做案例

請參考官方手冊,瞭解更多操做案例和用法。

參考資料

相關文章
相關標籤/搜索