小景的工具使用--Java診斷工具Arthas的使用說明

2023-10-23 12:00:27

小景最近在做程式和資料庫的壓測工作,期間監控壓測資料,分析程式原因變成了一個待解決的問題,根據公司小夥伴的建議,接觸了阿爾薩斯這個診斷工具,下面小景分別基於Linux作業系統和Windows作業系統,來詳細的說下使用說明和使用心得。

 

Arthas(阿爾薩斯)是一個用於診斷Java應用程式的開源工具,它是一種命令列工具,用於實時分析和偵錯Java應用程式的執行時行為。它提供了豐富的功能,可以幫助開發人員診斷和解決各種Java應用程式中的效能問題和故障。

基於Linux系統,以下是Arthas的詳細使用方式:

    1. 安裝Arthas: 首先,您需要安裝Arthas。您可以從官方網站 https://alibaba.github.io/arthas/ 下載Arthas的最新版本。下載後,將其解壓縮到您選擇的目錄中。

    2. 啟動Arthas: 進入Arthas的安裝目錄,執行以下命令來啟動Arthas:

      ./as.sh或者./as.bat

      這將啟動Arthas的命令列介面。

    3. 選擇目標應用程式: 在Arthas命令列介面中,您需要選擇要診斷的目標Java應用程式。可以使用以下命令列出正在執行的Java應用程式:

      ps

      然後使用-t選項選擇目標應用程式,例如:

      -t 12345

      其中,12345是目標應用程式的PID。

    4. 使用命令進行分析和偵錯: 一旦選擇了目標應用程式,您可以使用各種Arthas命令來進行分析和偵錯。例如,您可以使用以下命令來檢視Java類的方法呼叫棧:

      jad java.lang.String

      或者,您可以使用以下命令來監視方法的呼叫和響應時間:

      watch com.example.MyClass myMethod '{params,returnObj,throwExp}' -n 3

      這將監視com.example.MyClass中的myMethod方法,並在每次呼叫時顯示引數、返回值和異常資訊,最多顯示3次。

      • 以下是一些常見的Arthas命令和其詳細用法:

        1. help命令: 使用 help 命令可以檢視Arthas的幫助檔案,列出可用的命令和功能。

          help
        2. dashboard命令: dashboard 命令可以顯示儀表板,提供了有關Java應用程式的實時資訊,包括執行緒、堆記憶體、類載入等。

          dashboard
        3. thread命令: 使用 thread 命令可以檢視Java執行緒的資訊,包括執行緒堆疊和執行緒狀態。

          thread
        4. jvm命令: jvm 命令允許您檢視Java虛擬機器器的資訊,如記憶體使用情況、垃圾回收統計等。

          jvm
        5. trace命令: trace 命令用於跟蹤方法的執行,可以用於監視特定方法的輸入、輸出和執行時間。

          trace com.example.MyClass myMethod
        6. watch命令: watch 命令用於監視方法的呼叫和返回值。您可以監視特定方法,並檢視引數、返回值和異常資訊。

          watch com.example.MyClass myMethod '{params,returnObj,throwExp}'
        7. jad命令: jad 命令用於反編譯Java類檔案,以檢視類的原始碼。

          jad com.example.MyClass
        8. sc命令: sc 命令用於檢視類載入情況,包括已載入的類、未載入的類和類載入器資訊。

          sc -d com.example.MyClass
        9. monitor命令: monitor 命令用於監視方法的執行情況,包括執行時間、呼叫次數等。

          monitor com.example.MyClass myMethod
        10. heapdump命令: heapdump 命令用於生成堆轉儲檔案,以便進行記憶體分析。

          heapdump /path/to/dump.hprof
    5. 退出Arthas: 要退出Arthas,可以使用quit命令。

以上只是Arthas功能的一個小demo,它還具有許多其他功能,如檢視類載入情況、檢視執行緒堆疊、分析效能問題等。您可以檢視官方檔案以深入瞭解更多資訊。Arthas是一個強大的工具,可幫助您快速診斷和解決Java應用程式中的問題。

 

基於Windows系統,以下是Arthas的詳細使用方式:

    1. 下載和安裝Arthas:

      1. 存取Arthas的官方網站:https://alibaba.github.io/arthas/,並下載最新版本的Arthas。

      2. 解壓縮下載的Arthas壓縮包到您的系統中。為了簡化操作,您可以將Arthas解壓到C:\arthas目錄。

    2. 開啟命令列介面:

      1. 在Windows系統中,您可以使用命令提示字元(Command Prompt)或PowerShell。開啟一個新的命令列介面視窗。
    3. 啟動Arthas:

      1. 切換到您的Arthas安裝目錄。在命令列中,使用以下命令:

        cd C:\arthas
      2. 然後,執行 as.bat 指令碼來啟動Arthas:

        as.bat

      這將啟動Arthas的命令列介面。

    4. 選擇目標Java應用程式:

      1. 在Arthas的命令列介面中,使用 ps 命令來列出正在執行的Java應用程式,以查詢您想要診斷和偵錯的應用程式。例如:

        ps
      2. 從列表中選擇您的目標Java應用程式,並記錄其PID(程序ID)。

    5. 連線到目標應用程式:

      1. 使用 -t 選項連線到目標Java應用程式,將 <PID> 替換為您在步驟4中獲得的目標應用程式的PID:

        -t <PID>

      例如,如果您的目標應用程式的PID是12345,可以使用以下命令連線到它:

      -t 12345
    6. 使用Arthas命令進行診斷和偵錯:

      1. 一旦連線到目標應用程式,您可以使用各種Arthas命令來獲取關於應用程式的實時資訊,進行分析和偵錯。以下是一些範例命令:

        1. 使用 dashboard 命令檢視應用程式的儀表板:

          dashboard
        2. 使用 thread 命令檢視執行緒資訊:

          thread
        3. 使用 jvm 命令檢視Java虛擬機器器資訊:

          jvm
        4. 使用 trace 命令跟蹤方法的執行:

          trace com.example.MyClass myMethod
        5. 使用 watch 命令監視方法的呼叫和返回值:

          watch com.example.MyClass myMethod '{params,returnObj,throwExp}'
      2. 根據您的需求,使用適當的Arthas命令進行診斷和偵錯。

    7. 退出Arthas:

      1. 要退出Arthas,您可以在Arthas命令列介面中使用 quit 命令。

在Windows系統上,確保您具有足夠的許可權來連線到目標Java應用程式,並根據需要處理特殊字元的跳脫。

最後,再來說下Arthas的拓展和延申:

 

以下是更詳細的方式來拓展和延伸Arthas的功能:

  1. 自定義命令:

    Arthas允許您建立自定義命令,這些命令可以用於執行特定的診斷或偵錯任務。您可以編寫自定義命令的外掛,以擴充套件Arthas的功能。這些自定義命令可以是Groovy指令碼,以實現各種自定義操作。建立自定義命令的一般步驟如下:

    • 編寫Groovy指令碼,其中包含自定義操作。
    • 將指令碼放置在Arthas的自定義命令目錄下,通常是~/.arthas/commands(Linux/macOS)或%USERPROFILE%\.arthas\commands(Windows)。
    • 在Arthas中使用自定義命令名稱來呼叫您的指令碼。

    這使您能夠根據具體需求建立自定義命令,以執行特定的分析或偵錯任務。

  2. 使用Arthas外掛系統:

    Arthas具有外掛系統,您可以使用該系統編寫自定義外掛來擴充套件Arthas的功能。外掛可以包括自定義命令、自定義函數、拓展效能監控等等。建立Arthas外掛的一般步驟如下:

    • 編寫Groovy指令碼或Java程式碼,實現自定義外掛功能。
    • 將外掛打包為JAR檔案。
    • 將JAR檔案放置在Arthas的外掛目錄下,通常是~/.arthas/lib(Linux/macOS)或%USERPROFILE%\.arthas\lib(Windows)。
    • 在Arthas中使用外掛的功能。

    外掛系統使您能夠將自定義功能完全整合到Arthas中,以執行高度客製化的任務。

  3. 指令碼和動態載入:

    Arthas支援通過Groovy指令碼進行自定義操作,您可以在執行時載入和執行這些指令碼。這使您可以在不重啟目標應用程式的情況下靈活地執行自定義程式碼。例如,您可以使用Groovy指令碼來執行動態的方法跟蹤、紀錄檔記錄或效能監控。

  4. 使用Arthas API:

    Arthas提供了Java API,您可以在Java應用程式中整合Arthas,以通過程式設計方式執行診斷和偵錯任務。這使得您可以構建自定義工具或整合Arthas的功能到現有的應用程式中。Arthas的API包括ArthasCoreAdviceListener等類,可用於動態診斷和偵錯Java應用程式。

  5. 結合AOP(面向切面程式設計):

    您可以使用Arthas的AOP功能來實現方法級別的攔截和切面程式設計。通過AOP,您可以監控、記錄和修改方法的行為,以適應特定需求。AOP可用於效能分析、安全性檢查、紀錄檔記錄等任務。

  6. 遠端擴充套件和監控:

    您可以將Arthas與遠端監控工具結合使用,以實現分散式應用程式的診斷和效能監控。這包括將Arthas與ELK堆疊(Elasticsearch、Logstash、Kibana)或Prometheus/Grafana等工具整合,以實現實時監控和紀錄檔分析。

  7. 社群和第三方外掛:

    在Arthas社群和第三方開發者的支援下,可能會有許多現成的外掛和擴充套件可供使用。您可以查詢和使用這些外掛,以簡化和加速特定任務的執行。

 

最後,希望小景的這篇文章可以幫助您解決實際工作中的問題,有什麼問題可以評論區或者關注我的微信公眾號來交流。