Arthas 使用攻略

目錄

背景

Arthas是什么?

安裝

使用arthas-boot(推薦)

啟動

常用命令

一鍵生成arthas命令的插件(強烈推薦)

watch

一、命令語法結構

二、核心參數詳解

三、實戰場景

1. 基礎觀測 - 查看入參和返回值

2. 條件過濾 - 只關注特定參數

3. 異常捕獲 - 定位NPE根源

4. 耗時監控 - 組合#cost變量

5. 對象深挖 - 追蹤集合內部數據

6. 鏈式觀測 - 結合OGNL表達式

jad

一、命令語法結構

二、核心參數詳解

三、實戰場景

1. 基礎用法 - 反編譯整個類

2. 過濾方法 - 只反編譯特定方法

3. 源碼對比 - 確認生產環境代碼版本

trace

一、核心功能原理

二、核心參數矩陣

三、實戰場景

1. 基礎耗時分析

2. 條件過濾分析

3. 多層調用鏈路展開

4. 異步線程追蹤

5. 重載方法區分

6. 異常路徑追蹤


背景

通常,本地開發環境無法訪問生產環境。如果在生產環境中遇到問題,則無法使用 IDE 遠程調試。更糟糕的是,在生產環境中調試是不可接受的,因為它會暫停所有線程,導致服務暫停。

開發人員可以嘗試在測試環境或者預發環境中復現生產環境中的問題。但是,某些問題無法在不同的環境中輕松復現,甚至在重新啟動后就消失了。

如果在代碼中添加一些日志以幫助解決問題,您將必須經歷以下階段:測試、預發,然后生產。這種方法效率低下,更糟糕的是,該問題可能無法解決,因為一旦 JVM 重新啟動,它可能無法復現,如上文所述。

Arthas 旨在解決這些問題。開發人員可以在線解決生產問題。無需 JVM 重啟,無需代碼更改。 Arthas 作為觀察者永遠不會暫停正在運行的線程。

Arthas是什么?

阿里巴巴開源的Java診斷工具Arthas(阿爾薩斯)是一款全能的運行時診斷神器,具備三大核心優勢:

  • 零侵入:無需重啟應用或修改代碼
  • 全維度:支持方法級監控、類加載追蹤、熱修復等
  • 可視化:提供命令行交互和Web Console兩種操作方式

Arthas 是一款線上監控診斷產品,通過全局視角實時查看應用 load、內存、gc、線程的狀態信息,并能在不修改應用代碼的情況下,對業務問題進行診斷,包括查看方法調用的出入參、異常,監測方法執行耗時,類加載信息等,大大提升線上問題排查效率。

安裝

使用arthas-boot(推薦)

下載arthas-boot.jar

curl -O https://arthas.aliyun.com/arthas-boot.jar

啟動

java -jar的方式啟動

java -jar arthas-boot.jar

啟動后如圖:


常用命令

一鍵生成arthas命令的插件(強烈推薦)

watch


Arthas的watch命令是動態觀測方法調用數據的核心工具,能夠實時捕獲方法的入參、返回值、異常信息,是診斷代碼邏輯問題的利器。

一、命令語法結構
watch 類全路徑 方法名 "{觀測表達式}" [條件過濾] [參數選項]
  • 觀測表達式:OGNL語法,支持多維度數據組合
  • 條件過濾'#cost>50'(耗時>50ms才觸發)
  • 參數選項:控制觀測行為(-b/-e/-x等)
二、核心參數詳解

參數

作用

示例

-b

觀察方法調用前(Before)的狀態

watch *Service login -b

-e

觀察方法異常時(Exception)的堆棧

watch *Dao query -e

-s

觀察方法返回后(Success)的結果

watch *Util parse -s

-x

指定對象展開層級(默認1層)

-x 3

(深入3層)

-n

最大捕獲次數(避免無限輸出)

-n 5

(只顯示5次)

三、實戰場景
1. 基礎觀測 - 查看入參和返回值
watch com.example.UserService getUserById "{params,returnObj}" -x 2

👉 輸出示例:

@ArrayList[@Object[][@Long[12345],  // 參數1: userId=12345],@User{          // 返回值id=12345,name="張三",age=30}
]

2. 條件過濾 - 只關注特定參數
watch *OrderService createOrder 'params[0] > 1000' 'params[0].amount > 1000' -x 3

👉 當訂單金額amount超過1000時觸發觀測


3. 異常捕獲 - 定位NPE根源
watch com.example.DataParser parse "{params,throwExp}" -e -x 2

👉 輸出異常堆棧:

throwExp : java.lang.NullPointerException: Cannot read field "id"at com.example.DataParser.parse(DataParser.java:23)...

4. 耗時監控 - 組合#cost變量
watch com.alibaba.dubbo.Provider invoke '#cost > 200' -n 3

👉 只顯示執行耗時超過200ms的調用,最多捕獲3次


5. 對象深挖 - 追蹤集合內部數據
watch *UserDAO batchInsert '{params[0].![name], returnObj.size}" -x 4

👉 觀測傳入的用戶名列表和插入后的記錄數
👉 ![name]表示遍歷集合獲取name屬性


6. 鏈式觀測 - 結合OGNL表達式
watch *ConfigLoader load "{ #map={ 'key1':params[0], 'result':returnObj } }" -x 3

👉 自定義數據結構,將入參和返回值封裝成Map輸出

jad

Arthas的jad命令是實時反編譯JVM加載類的利器,能快速查看內存中的字節碼對應的Java源碼,是排查類沖突、驗證代碼版本的必備工具。

一、命令語法結構
jad [--source-only] 類全路徑 [方法名]
  • 內存級反編譯:直接讀取JVM中的Class字節碼
  • 無需源碼:即使生產環境沒有源代碼也能查看邏輯
  • 動態驗證:檢查熱更新后的代碼是否生效
  • 支持過濾:可指定反編譯單個方法
二、核心參數詳解

參數

作用

使用場景

--source-only

僅顯示Java源碼(去除類加載信息)

快速查看核心邏輯

--lineNumber

顯示行號(需LocalVariableTable存在)

定位異常堆棧具體行

--methodName

反編譯指定方法

過濾復雜類的大方法

--classLoaderClass

指定ClassLoader進行反編譯

多ClassLoader環境精準定位


三、實戰場景
1. 基礎用法 - 反編譯整個類
jad com.example.UserService# 輸出示例
ClassLoader: jdk.internal.loader.ClassLoaders$AppClassLoader@2c13b15
Location: file:/app.jarpublic class UserService {public User getUserById(Long id) {return userDao.query(id);}...
}

2. 過濾方法 - 只反編譯特定方法

jad com.example.ConfigLoader loadConfig# 輸出指定方法的反編譯結果

3. 源碼對比 - 確認生產環境代碼版本

jad --source-only com.alibaba.dubbo.config.ProtocolConfig# 對比本地代碼,檢查是否有熱修復或不同版本

trace

Arthas的trace命令是方法調用鏈路追蹤神器,專門用于分析代碼執行路徑中各子調用的耗時分布,快速定位性能瓶頸。以下從核心原理到高階用法全面解析:


一、核心功能原理
trace [選項] 類全路徑 方法名 [條件表達式]
  • 火焰圖式分析:展示方法內部調用鏈的樹狀結構
  • 耗時統計:精確到每個子調用的耗時占比
  • 智能過濾:通過條件表達式篩選需要監控的調用
  • 動態插樁:基于字節碼增強技術實現無侵入分析

二、核心參數矩陣

參數

作用

示例

-n

最多監控次數(防刷屏)

-n 5

(只顯示5次結果)

#cost

耗時過濾條件(單位ms)

'#cost > 200'

--skipJDK

跳過JDK原生方法調用

--skipJDK false

-E

正則匹配增強(類+方法)

-E com.example.*Service

--list-class

顯示可追蹤的類列表

配合-E

使用


三、實戰場景
1. 基礎耗時分析
trace com.example.OrderService createOrder

👉 輸出示例:

java復制
+---+--------+--------------+---------+-------+------+
|#  |耗時占比 |    調用方法    | 調用次數 | 總耗時 | 平均 |
+---+--------+--------------+---------+-------+------+
|1  | 45.3%  | UserDAO.query |    3    | 340ms | 113ms|
|2  | 32.1%  | Redis.set     |    5    | 241ms | 48ms |

2. 條件過濾分析
trace *UserService getUserById '#cost > 50' -n 3

👉 只顯示單次調用總耗時超過50ms的請求,最多捕獲3次


3. 多層調用鏈路展開
trace -E com.example.*Controller.* -j 3

👉 監控所有Controller類方法,展開3層調用深度


4. 異步線程追蹤
trace --skipJDK=false java.util.concurrent.FutureTask get

👉 追蹤線程池異步任務執行情況(需關閉JDK跳過)


5. 重載方法區分
trace com.example.Utils 'parse' params.length==2

👉 只監控有兩個參數的parse重載方法


6. 異常路徑追蹤
trace com.example.PaymentService pay 'throwExp!=null'

👉 僅捕獲出現異常的支付調用路徑

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79161.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79161.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79161.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

冥想類短視頻批量剪輯自動混剪技術實踐:從素材處理到智能合成全解析

一、引言:工業化內容生產的技術突圍 在心理健康類內容爆發的當下,冥想類短視頻憑借「低制作成本 高用戶粘性」的特性成為熱門賽道。本文結合實戰經驗,解析如何通過模塊化素材處理、參數化合成引擎、自動化質量控制等技術手段,構…

【自定義控件實現最大高度和最大寬度實現】

背景 開發中偶爾遇到控件寬度或者高度在自適應的情況下,有個邊界值,也就是最大值。 比如高度自適應的情況下最大高度300dp這種場景。 實現 關鍵節點代碼: Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)…

綜合練習三

使用到的知識點:xml文件,初始化file數據,提取file文件數據 題目:水文檢測系統 備注:可以把序號作為該條數據的唯一標識(即UUID),而不是第一條第二條數據這樣的類型。代碼是后者&…

Microsoft Entra ID 詳解:現代身份與訪問管理的核心

Microsoft Entra ID(原名為 Azure Active Directory,簡稱 Azure AD)是微軟推出的云端身份和訪問管理服務,專為現代混合環境設計,支持企業安全地管理用戶身份、控制資源訪問,并集成多種應用與服務。以下從核心功能到最佳實踐全面解析 Entra ID。 1. Entra ID 的核心定位 …

從技術角度看Facebook的隱私保護機制

在數字化時代,隱私保護成為了公眾關注的焦點。作為全球最大的社交網絡平臺之一,Facebook 在隱私保護方面采取了一系列技術措施。本文將從技術角度探討 Facebook 的隱私保護機制,揭示它是如何在提供個性化服務的同時,確保用戶隱私信…

基于策略模式實現靈活可擴展的短信服務架構

基于策略模式實現靈活可擴展的短信服務架構 引言 在企業級應用開發中,短信服務是不可或缺的基礎功能之一。隨著業務發展,我們可能需要接入多個短信服務提供商(如阿里云、騰訊云、第三方短信網關等),并能夠在不修改核…

Vue 3 單文件組件中 VCA 語法糖及核心特性詳解

在 Vue.js 的開發世界里,單文件組件(Single File Components,簡稱 SFC)是構建復雜應用的基石。它將 HTML、CSS 和 JavaScript 代碼封裝在一個.vue文件中,極大地提高了代碼的可維護性和復用性。 本文將深入探討單文件組…

【Unity C#從零到精通】項目深化:構建核心游戲循環、UI與動態敵人系統

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

SNR8016語音模塊詳解(STM32)

目錄 一、介紹 二、傳感器原理 1.原理圖 2.引腳描述 三、程序設計 main文件 usart.h文件 usart.c文件 四、實驗效果 五、資料獲取 項目分享 一、介紹 SNR8016語音模塊是智納捷科技生產的一種離線語音識別模塊,設計適合用于DIY領域,開放用戶設…

「動態規劃」線性DP:最長上升子序列(LIS)|編輯距離 / LeetCode 300|72(C++)

概述 DP,即動態規劃是解決最優化問題的一類算法,我們要通過將原始問題分解成規模更小的、相似的子問題,通過求解這些易求解的子問題來計算原始問題。 線性DP是一類基本DP,我們來通過它感受DP算法的奧義。 最長上升子序列&#x…

【NumPy完全指南】從基礎操作到高性能計算實戰

📑 目錄 一、NumPy核心價值1.1 科學計算現狀分析1.2 ndarray設計哲學 二、核心數據結構解析2.1 ndarray內存布局2.2 數據類型體系 三、矢量化編程實踐3.1 通用函數(ufunc)示例3.2 廣播機制圖解 四、高性能計算進階4.1 內存預分配策略4.2 Cython混合編程 五、典型應用…

你的項目有‘哇‘點嗎?

你的項目有哇點嗎? 刷了一下午招聘軟件,發現沒?大廠JD里總愛寫有創新力者優先——可你們的簡歷,創新力還不如食堂菜單! 程序員寫項目最大的誤區:把創新當彩蛋藏最后!什么參與需求評審負責模塊…

2025年危化品安全員考試題庫及答案

一、單選題 126.安全生產監督管理部門和負有安全生產監督管理職責的有關部門逐級上報事故情況,每級上報的時間不得超過()小時。 A.2 B.6 C.12 答案:A 127.按照《安全生產法》規定,危險化學品生產經營單位的從業人員不服從管理,違反安全生…

第十六屆藍橋杯 C/C++ B組 題解

做之前的真題就可以發現,藍橋杯特別喜歡出找規律的題,但是我還是低估了官方的執念。本博客用于記錄第一次藍橋的過程,代碼寫的很爛,洛谷已經有的題解,這里不再贅述,只說自己遇到的問題。用于以后回顧和查找…

C++ 基于多設計模式下的同步異步?志系統-2項目實現

?志系統框架設計 1.?志等級模塊:對輸出?志的等級進?劃分,以便于控制?志的輸出,并提供等級枚舉轉字符串功能。 ? OFF:關閉 ? DEBUG:調試,調試時的關鍵信息輸出。 ? INFO:提?,普通的提?…

提示詞工程(GOT)把思維鏈推理過程圖結構化

Graph of Thoughts(GOT)? 思維圖(Graph of Thoughts)是一種結構化的表示方法,用于描述和組織模型的推理過程。它將信息和思維過程以圖的形式表達,其中節點代表想法或信息,邊代表它們…

登錄github失敗---解決方案

登錄github失敗—解決方案 1.使用 Microsoft Edge 瀏覽器 2.https://www.itdog.cn/dns/ 查詢 github.global.ssl.fastly.net github.com 兩個 域名的 IP 3.修改DNS 為 8.8.8.8 8.8.4.4 4.修改windows hosts 文件 5. 使用 Microsoft Edge 瀏覽器 打開github.com

Spring AOP概念及其實現

一、什么是AOP 全稱Aspect Oriented Programming,即面向切面編程,AOP是Spring框架的第二大核心,第一大為IOC。什么是面向切面編程?切面就是指某一類特定的問題,所以AOP也可以稱為面向特定方法編程。例如對異常的統一處…

強化學習_Paper_2017_Curiosity-driven Exploration by Self-supervised Prediction

paper Link: ICM: Curiosity-driven Exploration by Self-supervised Prediction GITHUB Link: 官方: noreward-rl 1- 主要貢獻 對好奇心進行定義與建模 好奇心定義:next state的prediction error作為該state novelty 如果智能體真的“懂”一個state,那…

spring中的@Configuration注解詳解

一、概述與核心作用 Configuration是Spring框架中用于定義配置類的核心注解,旨在替代傳統的XML配置方式,通過Java代碼實現Bean的聲明、依賴管理及環境配置。其核心作用包括: 標識配置類:標記一個類為Spring的配置類,…