【Arthas實戰】常見使用場景與命令分享

簡介:

????????Arthas是一款Java診斷工具,適用于多種場景,如接口響應變慢、CPU占用過高、熱更新需求等。其核心命令包括實時監控面板(dashboard)、線程狀態查看(thread)、方法調用鏈路追蹤(trace)、反編譯線上代碼(jad)、監控方法入參和返回值(watch)、熱更新代碼(redefine)、方法調用耗時統計(monitor)以及生成火焰圖(profiler)。

一、Arthas典型使用場景

  • 日志沒報錯,但接口響應突然從?50ms?飆升到?5s

  • CPU 占用 100%,但無法快速定位是哪段代碼導致的

  • 熱更新需求:修復 Bug 后不想重啟服務

二、核心命令

1. 實時監控面板:dashboard (查看實時線程、內存、GC狀態)

dashboard

2. 定位線程阻塞問題:thread

2.1 查看所有線程狀態

thread

?2.2?查看ID線程實際使用

thread ID

2.3 排查CPU占用最高的線程

thread -n 3

2.4 分析死鎖

thread -b

3. 追蹤方法調用鏈路:trace
追蹤指定方法的調用耗時

trace com.example.service.TestService getUserById

4. 反編譯線上代碼:jad

jad com.example.controller.TestController

5. 監控方法入參和返回值:watch

監控 getUserById 方法的入參和返回值

watch com.example.service.TestService getUserById "{params, returnObj}" -x 3

6. 熱更新代碼:redefine(不建議使用)
  • 本地修改源碼后編譯為 .class 文件
  • 上傳到服務器并熱加載

redefine /tmp/TestController.class

7. 方法調用耗時統計:monitor

每 60 秒統計一次 getUserById 的調用次數和平均耗時

monitor -c 60 com.example.service.TestService getUserById

8. 生成火焰圖(定位性能瓶頸):profiler(需要安裝C環境)

profiler startprofiler stop --format html

三、常見案例:

案例 1:CPU 突然飆升至 100%

1.查看 CPU 占用最高的線程

thread?-n?1

2.發現線程 ID 888 的堆棧

?"http-nio-8080-exec-1"?Id=888?RUNNABLE? ? at com.example.TestService.calculate(...)

3.反編譯查看問題代碼

jad com.example.TestService calculate

案例 2:接口響應緩慢

1.追蹤方法調用鏈路

trace?com.example.controller.TestController getProfile

2.發現調用數據庫查詢耗時 2s

trace?com.example.TestService findById

3.檢查 SQL 是否命中索引

watch?com.example.TestService findById?"{params[0]}"?-x?1

案例 3:NoSuchMethodError

1.檢查類加載器是否加載了正確版本

sc -d com.example.TestService

2.重新加載修復后的類

redefine /tmp/TestService.class

四、注意事項

  1. 權限控制:生產環境限制 Arthas 使用權限,避免誤操作

  2. 性能影響watch/trace?等命令會增加開銷,排查后及時關閉

  3. 安全風險:禁止將 Arthas 暴露在公網環境

五、總結

? ? ? ? 個人在使用Arthas覺得可以很好的在短時間找到問題根源,進行方法級性能分析。

???👍如果對你有幫助,給博主一個免費的點贊以示鼓勵
歡迎各位🔎點贊👍評論收藏??

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

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

相關文章

Jenkins 最佳實踐

1. 在Jenkins中避免調度過載 過載Jenkins以同時運行多個作業可能導致資源競爭、構建速度變慢和系統性能問題。分配作業啟動時間可以防止瓶頸,并確保更順暢的執行。如何實現? 在Cron表達式中使用H:引入抖動(jitter)&a…

pytest框架 - 第二集 allure報告

一、斷言assert 二、Pytest 結合 allure-pytest 插件生成美觀的 Allure 報告 (1) 安裝 allure 環境 安裝 allure-pytest 插件:pip install allure-pytest在 github 下載 allure 報告文件 地址:Releases allure-framework/allure2 GitHub下載&#x…

人工智能時代:解鎖職業新身份,從“認證師”到“工程師”的進階之路

在人工智能技術浪潮席卷全球的今天,技術的飛速迭代正在重塑職業版圖。從算法優化到倫理決策,從系統測試到應用開發,AI技術不再只是程序員的專屬領域,而是成為各行各業從業者必須掌握的“生存技能”。當企業爭相布局AI賽道,個人如何在這場變革中搶占先機?答案或許藏在兩個…

【帶文檔】網上點餐系統 springboot + vue 全棧項目實戰(源碼+數據庫+萬字說明文檔)

📌 一、項目概括 本系統共包含三個角色: 管理員:系統運營管理者 用戶:點餐消費用戶 美食店:上傳菜品與處理訂單的店鋪賬號 通過對這三類角色的權限與業務分工設計,系統實現了點餐流程的全鏈路數字化&a…

window nvidia-smi命令 Failed to initialize NVML: Unknown Error

如果驅動目錄下的可以執行,那可能版本原因 "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"復制"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"替換 C:\Windows\System32\nvidia-smi.exe 或者 把C:\Windows\System3…

接觸感知 鉗位電路分析

以下是NG板接觸感知電路的原理圖。兩極分別為P3和P4S&#xff0c;電壓值P4S < P3。 電路結構分兩部分&#xff0c;第一部分對輸入電壓進行分壓鉗位。后級電路使用LM113比較器芯片進行電壓比較&#xff0c;輸出ST接觸感知信號。 鉗位電路輸出特性分析 輸出電壓變化趨勢&a…

70、微服務保姆教程(十三)Docker容器詳細講義

一、關于Docker 1.1為什么要用docker? 隨著開發的項目越來越復雜,軟件越來越多,服務器越來越多,我們在開發和部署的時候會遇到很多問題,比如: 1.不同的應用程序可能會有不同的應用環境,比如Java開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都…

Python 中的 typing.ClassVar 詳解

一、ClassVar 的定義和基本用途 ClassVar 是 typing 模塊中提供的一種特殊類型&#xff0c;用于在類型注解中標記類變量&#xff08;靜態變量&#xff09;。根據官方文檔&#xff0c;使用 ClassVar[…] 注釋的屬性表示該屬性只在類層面使用&#xff0c;不應在實例上賦值 例如&…

架構與UML4+1視圖

簡單對比分析 架構41視圖 架構41視圖是由Philippe Kruchten提出的&#xff0c;用于描述軟件系統的架構。它包括以下五個視圖&#xff1a; 邏輯視圖&#xff1a;描述系統的功能需求&#xff0c;展示系統的靜態結構&#xff0c;通常使用類圖、對象圖等。開發視圖&#xff1a;…

Redis 八股

目錄 數據類型 字符串&#xff1a; List&#xff1a; HASH&#xff1a; Set&#xff1a; Zset&#xff1a; BitMap&#xff1a;&#xff08;這個及以下是后來新增的數據結構&#xff09; HyperLogLog&#xff1a; GEO&#xff1a; Stream&#xff1a; 主要數據結構 …

基于協同過濾的文學推薦系統設計【源碼+文檔+部署】

基于協同過濾的文學推薦系統設計 摘要 隨著信息技術的飛速發展和文學閱讀需求的日益多樣化&#xff0c;構建一個高效、精準的文學推薦系統變得尤為重要。本文采用Spring Boot框架&#xff0c;結合協同過濾算法&#xff0c;設計并實現了一個基于用戶借閱行為和社交論壇互動的文學…

鴻蒙電腦:五年鑄劍開新篇,國產操作系統新引擎

出品 | 何璽 排版 | 葉媛 前不久&#xff0c;璽哥發布的《鴻蒙電腦&#xff0c;刺向壟斷的利刃&#xff0c;將重塑全球PC市場格局》發布后&#xff0c;獲得了讀者朋友的積極反饋&#xff0c;不少都期望鴻蒙電腦早日發布。 如今&#xff0c;它真來了&#xff01; 5月8日&…

EWOMAIL

1、錯誤 Problem: problem with installed package selinux-policy-targeted-3.14.3-41.el8.noarch package fail2ban-server-1.0.2-3.el8.noarch requires (fail2ban-selinux if selinux-policy-targeted), but none of the providers can be installed - package fail2ban-…

qt5.14.2 opencv調用攝像頭顯示在label

ui界面添加一個Qlabel名字是默認的label 還有一個button名字是pushButton mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <opencv2/opencv.hpp> // 添加OpenCV頭文件 #include <QTimer> // 添加定…

Spring三級緩存的作用與原理詳解

在Spring框架中&#xff0c;Bean的創建過程涉及到了三級緩存機制。這個機制主要是為了提高單例模式下bean實例化和依賴注入的效率。本文將深入探討Spring中的三級緩存&#xff0c;以及其在bean生命周期中的重要作用。 首先&#xff0c;讓我們理解什么是三級緩存。Spring中的三…

IoTDB集群的一鍵啟停功能詳解

IoTDB&#xff08;Internet of Things Database&#xff09;作為一種專為物聯網設計的高性能時序數據庫&#xff0c;支持單機與分布式等多種部署模式。隨著節點數量的增加&#xff0c;手動管理集群的啟動與停止過程變得繁瑣。為了提升部署效率&#xff0c;IoTDB 提供了一鍵啟停…

Oracle學習日記--Oracle中使用單個inert語句實現插入多行記錄

目錄 前言&#xff1a; 問題現象&#xff1a; 問題分析&#xff1a; 解決方法&#xff1a; 1、insert into ... union all句式 2、insert all into ...select 1 from dual句式 總結&#xff1a; 前言&#xff1a; 最近項目中使用到了Oracle數據庫&#xff0c;由于Oracle數…

LabVIEW 程序運行時內存不足報錯原因

在 LabVIEW 程序開發與運行過程中&#xff0c;內存不足報錯并退出是常見且棘手的問題。這不僅影響程序穩定性&#xff0c;還可能導致數據丟失與系統崩潰。以下從程序設計、硬件資源、系統環境等多維度深入剖析其成因&#xff0c;幫助開發者準確定位并解決問題。 ? 一、程序設…

【GAN網絡入門系列】一,手寫字MINST圖片生成

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 博主簡介&#xff1a;努力學習的22級本科生一枚 &#x1f31f;?&#xff1b;探索AI算法&#xff0c;C&#xff0c;go語言的世界&#xff1b;在迷茫中尋找光芒…

Baklib加速企業AI數據智理轉型

Baklib智理AI數據資產 在AI技術深度滲透業務場景的背景下&#xff0c;Baklib通過構建企業級知識中臺架構&#xff0c;重塑了數據資產的治理范式。該平臺采用智能分類引擎與語義分析模型&#xff0c;將分散在郵件、文檔、數據庫中的非結構化數據轉化為標準化的知識單元&#xf…