關于對運行中的項目做java監測的需求下,Arthas則是一個很好的解決方案。
我們可以用來
1.監控cpu 現成、內存、堆棧
2.排查cpu飚高 造成原因
3.接口沒反應 是否死鎖
4.接口慢優化
5.代碼未按預期執行 是分支不對 還是沒提交?
6.線上低級錯誤 能不能不重啟下 熱部署 、類替換
一、簡介
Arthas 是阿里開源的 Java 診斷工具,深受開發者喜愛。在線排查問題,無需重啟;動態跟蹤 Java 代碼;實時監控 JVM 狀態。Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。
二、安裝
要安裝 Arthas 工具,可以按照以下步驟進行:
-
訪問 Arthas 的 GitHub 倉庫:Arthas GitHub。
-
根據操作系統,選擇下載最新版本的 Arthas 工具,這是中文官網https://arthas.aliyun.com。
-
解壓下載的文件到希望存放 Arthas 的目錄。
-
打開命令行窗口,并進入到解壓后的 Arthas 目錄。
-
執行
./as.sh
(Linux/Mac)或as.bat
(Windows)啟動 Arthas 工具。
現在,成功安裝了 Arthas 工具,可以開始使用它來進行 Java 診斷了。
Windows為例 找到對應的下載解壓后的目錄,執行cmd,java -jar arthas-boot.jar
這里會展示啟動arthas之前的正在運行的項目,想要查看哪個項目就可以直接輸入序號 例:3
看到logo后則表示已經Attach成功,就可以接著執行對應命令來進行檢測等操作。
三、命令
1. help
: 查看幫助文檔,列出所有可用命令。可以使用 help <command>
獲取特定命令的詳細說明。
2. dashboard
: 顯示實時的 JVM 儀表盤,提供內存、線程、GC 等關鍵信息的概覽。這有助于快速了解應用程序的運行狀況。
3. thread
: 查看線程信息和線程堆棧。可以使用此命令來分析線程的運行狀態,識別死鎖或性能瓶頸。
-
示例:
thread
命令可以列出所有線程,并顯示每個線程的 ID、狀態、名稱和堆棧信息。 -
用法:
thread
: 列出所有線程。thread -n 10
: 列出前 10 個線程。thread -b
: 列出所有阻塞的線程。thread <threadId>
: 查看指定線程的詳細信息。
4. heapdump
: 生成 Java 堆轉儲文件,用于分析內存使用情況。這對于排查內存泄漏或內存溢出問題非常有用。
-
示例:
heapdump
命令可以生成一個堆轉儲文件,包含了應用程序在當前時刻的內存快照。 -
用法:
heapdump
: 生成一個堆轉儲文件,默認保存到當前目錄。heapdump -f /tmp/heapdump.hprof
: 指定堆轉儲文件的保存路徑和文件名。
5. watch
: 實時監控方法的調用次數、耗時等。可以使用此命令來觀察方法的執行效率,識別性能瓶頸。
-
示例:
watch
命令可以監控指定方法的調用次數、耗時、參數和返回值等信息。 -
用法:
watch -E 'executionTime' -n 10 'com.example.MyService.processOrder(*)'
: 監控com.example.MyService.processOrder()
方法的執行時間,每 10 次調用輸出一次統計結果。watch -E 'returnValue' -n 5 'com.example.MyService.processOrder(String, int)'
: 監控com.example.MyService.processOrder(String, int)
方法的返回值,每 5 次調用輸出一次結果。
6. trace
: 跟蹤方法的調用,包括參數和返回值。這有助于理解方法的執行流程,定位問題根源。
-
示例:
trace
命令可以跟蹤指定方法的調用流程,包括參數、返回值、調用棧信息等。 -
用法:
trace com.example.MyService.processOrder(*)
: 跟蹤com.example.MyService.processOrder()
方法的調用流程。
7. sc <class>
: 查看指定類的代碼。
-
示例:
sc
命令可以查看指定類的源代碼,方便理解代碼邏輯。 -
用法:
sc com.example.MyService
: 查看com.example.MyService
類的源代碼。
8. redefine <class>
: 動態修改指定類的代碼,無需重啟應用程序。
-
示例:
redefine
命令可以動態修改指定類的代碼,方便快速驗證代碼修改效果。 -
用法:
redefine com.example.MyService
: 動態修改com.example.MyService
類的代碼。
9. jvm
: 查看 JVM 的運行參數和狀態。
-
示例:
jvm
命令可以查看 JVM 的運行參數和狀態,可以了解 JVM 的運行情況。 -
用法:
jvm
: 查看 JVM 的基本信息。jvm -D
: 查看 JVM 的系統屬性。jvm -X
: 查看 JVM 的運行參數。
10. ognl <expression>
: 使用 OGNL 表達式訪問對象屬性。
11. jad <class>
: 反編譯指定類的 Java 字節碼。
-
示例:
jad
命令可以反編譯指定類的 Java 字節碼,方便查看類的代碼結構。 -
用法:
jad com.example.MyService
: 反編譯com.example.MyService
類的字節碼。
四、總結
1. 線上問題排查利器: Arthas 的強大功能可以幫助您快速定位和解決線上問題,例如:
- 性能問題: 使用
watch
和trace
命令分析方法的執行時間和調用次數,識別性能瓶頸。 - 內存問題: 使用
heapdump
命令生成堆轉儲文件,分析內存泄漏或內存溢出問題。 - 線程問題: 使用
thread
命令查看線程狀態和堆棧,識別死鎖或線程阻塞問題。 - 代碼問題: 使用
sc
命令查看類和方法的代碼,幫助您理解代碼邏輯并定位問題。
2. 提高開發效率: Arthas 不僅是排查問題的工具,還可以提高開發效率,例如:
- 快速定位問題: 使用
trace
和watch
命令快速定位問題代碼,減少調試時間。 - 動態修改代碼: 使用
redefine
命令動態修改代碼,無需重啟應用程序,方便快速驗證代碼修改效果。 - 查看運行時數據: 使用
dashboard
和jvm
命令查看運行時數據,幫助您了解應用程序的運行狀態。
3. 學習和探索: Arthas 是學習和探索 Java 運行時的絕佳工具,例如:
- 深入了解 JVM: 使用
jvm
命令查看 JVM 的運行參數和狀態,加深對 JVM 的理解。 - 學習 Java 代碼: 使用
sc
命令查看類和方法的代碼,學習 Java 代碼的實現細節。 - 探索 Java 運行時: 使用
ognl
和jad
命令探索 Java 運行時環境,了解 Java 運行時的內部機制。
總而言之,Arthas 是一款功能強大的工具,可以幫助有效地診斷和監控 Java 應用程序,提高開發效率。
四、Idea插件
idea也有現成的Arthas插件,可以有效的幫我們生成命令。
可以右鍵方法,生成命令到剪貼板里面。