【Arthas】阿里的線上jvm監控診斷工具的基本使用

關于對運行中的項目做java監測的需求下,Arthas則是一個很好的解決方案。
我們可以用來
1.監控cpu 現成、內存、堆棧
2.排查cpu飚高 造成原因
3.接口沒反應 是否死鎖
4.接口慢優化
5.代碼未按預期執行 是分支不對 還是沒提交?
6.線上低級錯誤 能不能不重啟下 熱部署 、類替換

一、簡介

Arthas 是阿里開源的 Java 診斷工具,深受開發者喜愛。在線排查問題,無需重啟;動態跟蹤 Java 代碼;實時監控 JVM 狀態。Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。

二、安裝

要安裝 Arthas 工具,可以按照以下步驟進行:

  1. 訪問 Arthas 的 GitHub 倉庫:Arthas GitHub。

  2. 根據操作系統,選擇下載最新版本的 Arthas 工具,這是中文官網https://arthas.aliyun.com。
    在這里插入圖片描述

  3. 解壓下載的文件到希望存放 Arthas 的目錄。

  4. 打開命令行窗口,并進入到解壓后的 Arthas 目錄。

  5. 執行 ./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 的強大功能可以幫助您快速定位和解決線上問題,例如:

  • 性能問題: 使用 watchtrace 命令分析方法的執行時間和調用次數,識別性能瓶頸。
  • 內存問題: 使用 heapdump 命令生成堆轉儲文件,分析內存泄漏或內存溢出問題。
  • 線程問題: 使用 thread 命令查看線程狀態和堆棧,識別死鎖或線程阻塞問題。
  • 代碼問題: 使用 sc 命令查看類和方法的代碼,幫助您理解代碼邏輯并定位問題。

2. 提高開發效率: Arthas 不僅是排查問題的工具,還可以提高開發效率,例如:

  • 快速定位問題: 使用 tracewatch 命令快速定位問題代碼,減少調試時間。
  • 動態修改代碼: 使用 redefine 命令動態修改代碼,無需重啟應用程序,方便快速驗證代碼修改效果。
  • 查看運行時數據: 使用 dashboardjvm 命令查看運行時數據,幫助您了解應用程序的運行狀態。

3. 學習和探索: Arthas 是學習和探索 Java 運行時的絕佳工具,例如:

  • 深入了解 JVM: 使用 jvm 命令查看 JVM 的運行參數和狀態,加深對 JVM 的理解。
  • 學習 Java 代碼: 使用 sc 命令查看類和方法的代碼,學習 Java 代碼的實現細節。
  • 探索 Java 運行時: 使用 ognljad 命令探索 Java 運行時環境,了解 Java 運行時的內部機制。

總而言之,Arthas 是一款功能強大的工具,可以幫助有效地診斷和監控 Java 應用程序,提高開發效率。

四、Idea插件

idea也有現成的Arthas插件,可以有效的幫我們生成命令。
在這里插入圖片描述
可以右鍵方法,生成命令到剪貼板里面。
在這里插入圖片描述

五、Idea插件

1.通過 Arthas Trace 命令將接口性能優化十倍

2.Java 診斷神器Arthas真有那么香?它到底能解決什么問題 | Arthas 教程實操 | 線上問題排查思路和手段

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

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

相關文章

STL--set和multiset集合

set和multiset會根據特定的排序準則&#xff0c;自動將元素排序。兩者不同之處在于multiset 允許元素重復而 set 不允許。如下圖: 使用set或multiset&#xff0c;必須先包含頭文件: #include <set>上述兩個類型都被定義為命名空間std內的class template: namespace std…

亞馬遜自養號測評:深入解析與搭建要求

在亞馬遜這電商平臺上&#xff0c;商品的評價對于賣家來說至關重要。為了提升商品的曝光率、排名、權重和銷量&#xff0c;賣家們紛紛采用各種推廣方式&#xff0c;其中&#xff0c;亞馬遜自養號測評成為了越來越多賣家選擇的一種有效方式。 亞馬遜自養號測評&#xff0c;顧名…

Android Retrofit 封裝模版

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、加上網絡訪問的權限二、引入依賴三、由API生成JavaBean四、封裝Retrofit五、調用 一、加上網絡訪問的權限 <uses-permission android:name"android.p…

分布式事務——9種解決方案的原理與分類

目錄 一、概要1. 分布式事務的概念2. 分布式事務解決方案分類 二、常見的分布式事務解決方案1. 基礎的 2PC&#xff08;二階段提交&#xff09;1.1 核心思想1.2 簡介1.3 主要特點1.3.1 優點1.3.2 缺點 2. 基礎的 3PC&#xff08;三階段提交&#xff09;2.1 核心思想2.2 簡介2.3…

C語言/數據結構——每日一題(有效的括號)

一.前言 如果想要使用C語言來解決這道題——有效的括號&#xff1a;https://leetcode.cn/problems/valid-parentheses/description/我們必須要借用上一篇我們所講的內容——棧的實現&#xff1a;https://blog.csdn.net/yiqingaa/article/details/138923750?spm1001.2014.3001.…

go routing 之 gorilla/mux

1. 背景 繼續學習 go 2. 關于 routing 的學習 上一篇 go 用的庫是&#xff1a;net/http &#xff0c;這次我們使用官方的庫 github.com/gorilla/mux 來實現 routing。 3. demo示例 package mainimport ("fmt""net/http""github.com/gorilla/mux&…

react實現把pc網站快捷添加到桌面快捷方式

文章目錄 1. 需求2. 實現效果3. 核心邏輯4. 完整react代碼 1. 需求 這種需求其實在國外一些游戲網站和推廣網站中經常會用到&#xff0c;目的是為了讓客戶 快捷方便的保存網站到桌面 &#xff0c;網站主動盡量避免下次找不到網站地址了&#xff0c;當然精確的客戶自己也可以使…

Python 字符串中運算符號可運行

使用eval() re {\n "path": "/sms/sendMsg",\n "data": {\n "mobile": "12345678901",\n "signCode": "短信簽名",\n "templateCode": "SMS_yyyy…

Oracle遞歸查詢筆記

目錄 一、創建表結構和插入數據 二、查詢所有子節點 三、查詢所有父節點 四、查詢指定節點的根節點 五、查詢指定節點的遞歸路徑 六、遞歸子類 七、遞歸父類 一、創建表結構和插入數據 CREATE TABLE "REGION" ( "ID" VARCHAR2(36) DEFAULT SYS_GUI…

解析Oracle文件頭內容

保存在Oracle數據文件頭中的信息很豐富&#xff0c;通常只要查詢DATAFILE_HEADER視圖就可以獲得數據文件頭中的信息。但其在數據文件頭中的具體位置&#xff0c;Oracle一直未公開過。所幸的是DBA們對數據文件頭的研究孜孜不倦&#xff0c;其研究成果在網上也是隨處可見。雖然這…

[前端|vue] 驗證器validator使用筆記 (筆記)

文檔 validator.js文檔地址 規則編寫示例 element-plus 使用示例 const captchaLoginRules {phoneNumber: [{ required: true, message: 手機號不能為空, trigger: blur },{validator: (_rule: any, value: string, _callback: any): boolean > {return isMobilePhone(…

vue-quill-editor 富文本編輯器使用出現的樣式問題

使用富文本類型&#xff1a; vue-quill-editor 注意&#xff1a; 富文本導出 html 我們使用的時候&#xff0c; 樣式凸顯不出來 DOM 結構 <p><sub class"ql-size-large">測試內容</sub><sup class"ql-size-large">222222</su…

6步:用NGINX部署ASP.NET Core,輕松上云

1. 準備工作在開始部署之前&#xff0c;確保你已經完成了以下準備工作&#xff1a;- 安裝.NET Core&#xff1a;確保你的Linux系統上安裝了.NET Core運行時。你可以從.NET官網下載。- 安裝NGINX&#xff1a;通過你的Linux發行版的包管理器安裝NGINX。例如&#xff0c;在Ubuntu上…

GPT提示詞技巧,使用教程,國內版官網直達,非套殼

GPT提示詞技巧&#xff0c;使用教程&#xff0c;國內版官網直達&#xff0c;非套殼 主站點&#xff1a;https://chatgpt-plus.top&#xff08;江蘇福建地區打不開&#xff0c;需要魔法&#xff09; 店鋪地址&#xff1a;https://buy.chatgpt-plus.top/ 選擇plus賬號進入&…

鴻蒙開發ArkUI-X基礎知識:【ArkUI代碼工程及構建介紹】

代碼工程及構建介紹 背景 ArkUI作為OpenHarmony的默認開發框架&#xff0c;在本項目&#xff08;ArkUI-X&#xff09;中需要做到一套代碼同時支持多平臺構建&#xff0c;所以會采取共倉開發的方式&#xff0c;部分倉直接指向OpenHarmony相關開源倉。 代碼結構及倉庫結構 代…

多模態模型(MLLM)論文串燒

近期看了一些多模態方向的工作&#xff0c;包括圖像、文本多模態&#xff0c;圖像、視頻、語音、文本多模態&#xff0c;做個總結。 Yi Qwen-VL LLaVA MobileVLM LanguageBind Video-LLaVA VAST

【機器學習300問】94、什么是多任務學習?

一、多任務學習的定義 多任務學習&#xff08;Multi-Task Learning, MTL&#xff09;是一種機器學習范式&#xff0c;它允許一個模型同時學習執行多個相關但不完全相同的任務。這種方法的核心是&#xff1a;通過共享表示或權重&#xff0c;不同的任務可以在學習過程中相互促進&…

淺談微服務的自動化部署

一、常用部署工具 jenkins,docker生態是比較常用的工具&#xff0c;本文也主要是聊這幾個。其他如Kubernetes (K8s)&#xff0c;Ansible&#xff0c;GitLab CI/CD等工具本文只是暫時提一下&#xff0c;不展開討論。 二、比較jenkins和docker生態 1、jenkins 優點 jenkins功…

Rust使用rust_xlsxwriter庫把Vec數據寫入Excel

一、Rust使用rust_xlsxwriter庫把一維Vec數據寫入Excel 在Rust中&#xff0c;使用rust_xlsxwriter庫將一維Vec數據寫入Excel文件是一個相對簡單的過程。首先&#xff0c;你需要確保你的Cargo.toml文件中已經添加了rust_xlsxwriter依賴。以下是如何添加依賴的示例&#xff1a; …

KMP題解代碼(含講解)

目錄 注意: next數組的變化規律&#xff1a; 初始化&#xff1a; 求next數組部分&#xff1a; KMP部分&#xff1a; AC代碼&#xff1a; 題目鏈接&#xff1a;【模板】KMP - 洛谷 注意: 1、next數組是針對子串的&#xff0c;并未涉及母串&#xff0c;因此求next數組時…