愛上Java診斷利器之Arthas

1. Arthas是什麼?

摘自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

2. 開啓Arthas之旅

2.1 安裝Arthas

  • 方式1:下載arthas-boot.jar包的方式
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
複製代碼

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

嘗試下arthas:服務器

# 啓動arthas,會進入命令行交互狀態
./as.sh
 # 查看arthas命令手冊
./as.sh -h
複製代碼

2.2 開始使用

下面演示咱們以as.sh爲主。app

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

2.2.1 基礎命令

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

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

其中第一列爲線程的ID。

  • 經過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 更多操做案例

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

參考資料

相關文章
相關標籤/搜索