Spring Boot系列之使用Arthas Tunnel Server 進行遠程調試實踐

Spring Boot系列之使用Arthas Tunnel Server 進行遠程調試實踐

前言

在開發和運維 Java 應用的過程中,遠程診斷和調試是一個不可或缺的需求。尤其是當生產環境出現問題時,能夠快速定位并解決這些問題至關重要。Arthas 是阿里巴巴開源的一款強大的 Java 診斷工具,它可以在不修改代碼、不重啟應用的情況下,實時診斷和分析 Java 應用的運行狀態。而 Arthas Tunnel Server 則為遠程連接提供了支持,使得我們可以通過 Web 管理頁面遠程連接到目標應用的 Arthas Agent,進行實時診斷。本文將詳細介紹如何通過 Arthas Tunnel Server 實現 Spring Boot 應用的遠程診斷,并提供詳細的操作步驟和使用示例。

一、環境準備

1.1 工具與版本

  • JDK:1.8 或更高版本
  • Spring Boot:2.3.0 或更高版本
  • Arthas Tunnel Server:4.0.5 版本
  • 操作系統:Linux 或 Windows(推薦使用 Linux)

1.2 下載 Arthas Tunnel Server

從 GitHub Releases 下載 arthas-tunnel-server-4.0.5-fatjar.jar,并將其放置在服務器的指定目錄(如 /home/arthas)。

二、啟動 Arthas Tunnel Server

2.1 配置啟動參數

在啟動 Arthas Tunnel Server 時,可以通過命令行參數配置服務的端口和管理頁面的訪問權限。以下是推薦的啟動命令:

java -jar arthas-tunnel-server-4.0.5-fatjar.jar \--server.port=8080 \                # Web 管理頁面的端口--arthas.server.port=7777 \         # 與 Arthas Agent 通信的端口--arthas.enable-detail-pages=true  # 啟用管理頁面
  • --server.port:Web 管理頁面的端口,默認為 8080。
  • --arthas.server.port:與 Arthas Agent 通信的端口,默認為 7777。
  • --arthas.enable-detail-pages:是否啟用管理頁面,默認為 false

如果要后臺啟動并保存一下運行日志:

nohup java -jar arthas-tunnel-server-4.0.5-fatjar.jar --arthas.enable-detail-pages=true --server.port=8080 --arthas.server.port=7777 > /opt/logs/arthas.log 2>&1 &

2.2 訪問管理頁面

啟動后,訪問 http://<服務器IP>:8080/,即可查看已連接的 Arthas Agent 列表。管理頁面提供了以下功能:

  • Agent 列表:顯示所有已連接的 Arthas Agent,包括 Agent ID、連接狀態、連接時間等信息。
  • 連接操作:可以對每個 Agent 進行連接、斷開連接等操作。
  • 實時監控:查看 Agent 的實時監控數據,如 CPU 使用率、線程狀態等。

Arthas Tunnel Server 管理頁面

三、Spring Boot 應用集成 Arthas

3.1 添加 Arthas 依賴

在 Spring Boot 項目的 pom.xml 文件中添加 Arthas 的 Spring Boot Starter:

<dependency><groupId>com.taobao.arthas</groupId><artifactId>arthas-spring-boot-starter</artifactId><version>4.0.5</version>
</dependency>

3.2 配置 Arthas

application.yml 文件中配置 Arthas 的隧道服務器地址:

arthas:telnetPort: -1httpPort: -1ip: 127.0.0.1appName: arthas_testagent-id: your_agent_id           # 唯一標識,用于區分不同的 Agenttunnel-server: ws://<tunnel-server-ip>:7777/ws  # Tunnel Server 的 WebSocket 地址
  • telnetPort:telnetPort為 -1 ,則不listen telnet端口,為 0 ,則隨機telnet端口
  • httpPort:httpPort為 -1 ,則不listen telnet端口,為 0 ,則隨機telnet端口
  • ip:127.0.0.1,本地訪問,0.0.0.0,網絡訪問
  • appName:應用名稱
  • agent-id:唯一標識,用于區分不同的 Agent,可以自定義。默認情況下,會生成隨機ID,如果 arthas agent配置了 appName,則生成的agentId會帶上appName的前綴。
  • tunnel-server:Tunnel Server 的 WebSocket 地址,格式為 ws://<tunnel-server-ip>:<tunnel-server-port>/ws

3.3 啟動 Spring Boot 應用

啟動應用后,Arthas Agent 會自動連接到指定的 Tunnel Server。如果連接成功,你可以在 Tunnel Server 的管理頁面中看到該 Agent 的信息。

四、遠程診斷示例

4.1 登錄管理頁面

在瀏覽器中訪問 http://<服務器IP>:8080/,查看已連接的 Arthas Agent。

如果要查看actuator,訪問http://127.0.0.1:8080/actuator/arthas,賬號名是arthas,密碼需要在啟動日志里找,返回:

{"clientConnections":{"VDYNUIRO0A7Q1QQCKZE7":{"host":"192.168.61.109","port":64113}},"version":"4.0.5","properties":{"server":{"host":"0.0.0.0","port":7777,"ssl":false,"path":"/ws","clientConnectHost":"192.168.62.78"},"embeddedRedis":null,"enableDetailPages":true,"enableIframeSupport":true},"agents":{"e9a2d4f3b8c7":{"host":"192.168.61.109","port":64020,"arthasVersion":"3.6.7"}}}

4.2 連接到目標 Agent

選擇需要診斷的 Agent,點擊“連接”按鈕,即可進入 Arthas 的命令行界面。在命令行界面中,你可以執行各種 Arthas 命令來診斷應用。
線程狀態

4.3 執行診斷命令

以下是一些常用的 Arthas 命令示例:

4.3.1 查看線程狀態
thread

該命令可以查看當前應用的所有線程狀態,包括線程 ID、線程名稱、線程狀態(如 RUNNABLE、WAITING 等)、CPU 使用率等信息。通過該命令,你可以快速定位到占用 CPU 過高的線程,或者處于等待狀態的線程。

在這里插入圖片描述

4.3.2 查看方法執行情況
trace com.example.demo.controller.HelloController sayHello

該命令可以跟蹤指定方法的執行情況,包括方法的調用次數、執行時間、參數值、返回值等信息。通過該命令,你可以分析方法的性能瓶頸,或者查看方法的調用鏈路。

在這里插入圖片描述

4.3.3 查看類加載信息
sc com.example.demo.model.User

該命令可以查看指定類的加載信息,包括類加載器、類的路徑、類的加載狀態等信息。通過該命令,你可以排查類加載問題,或者查看類的加載路徑。

在這里插入圖片描述

五、常見問題與解決方法

5.1 無法連接到 Tunnel Server

  • 原因:網絡連接問題或防火墻限制。
  • 解決方法:檢查網絡連通性,確保 Tunnel Server 的端口未被防火墻阻止。可以使用 telnet <tunnel-server-ip> <tunnel-server-port> 命令測試網絡連通性。

5.2 管理頁面無法訪問

  • 原因:未啟用 --arthas.enable-detail-pages 參數或端口被占用。
  • 解決方法:確保啟動命令中包含 --arthas.enable-detail-pages=true,并檢查端口是否被占用。可以使用 netstat -an | grep <port> 命令查看端口占用情況。

5.3 Agent 無法注冊到 Tunnel Server

  • 原因:配置的 tunnel-server 地址與實際運行的 Tunnel Server 不匹配。
  • 解決方法:確保 application.yml 中的 tunnel-server 地址和端口正確。可以使用 ping <tunnel-server-ip> 命令測試網絡連通性。

六、總結

通過 Arthas Tunnel Server,我們可以輕松實現 Spring Boot 應用的遠程診斷和調試。這種方案在生產環境中非常實用,特別是在需要快速定位和解決問題時。希望本文能幫助你快速上手 Arthas 的遠程調試功能,并在實際工作中發揮其強大的作用。

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

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

相關文章

圖像預處理-添加水印

一.ROI切割 類似裁剪圖片&#xff0c;但是原理是基于Numpy數組的切片操作(ROI數組切片是會修改原圖數據的)&#xff0c;也就是說這個“裁剪”不是為了保存“裁剪”部分&#xff0c;而是為了方便修改等處理。 import cv2 as cv import numpy as npimg cv.imread(../images/dem…

數據結構——八大排序算法

排序在生活中應用很多&#xff0c;對數據排序有按成績&#xff0c;商品價格&#xff0c;評論數量等標準來排序。 數據結構中有八大排序&#xff0c;插入、選擇、快速、歸并四類排序。 目錄 插入排序 直接插入排序 希爾排序 選擇排序 堆排序 冒泡排序 快速排序 hoare…

吃透LangChain(五):多模態輸入與自定義輸出

多模態數據輸入 這里我們演示如何將多模態輸入直接傳遞給模型。我們目前期望所有輸入都以與OpenAl 期望的格式相同的格式傳遞。對于支持多模態輸入的其他模型提供者&#xff0c;我們在類中添加了邏輯以轉換為預期格式。 在這個例子中&#xff0c;我們將要求模型描述一幅圖像。 …

【Rust 精進之路之第10篇-借用·規則】引用 (``, `mut`):安全、高效地訪問數據

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025年4月20日 引言:所有權的“限制”與“變通”之道 在上一篇【所有權核心】中,我們揭示了 Rust 如何通過所有權規則和移動 (Move) 語義來保證內存安全,避免了垃圾回收器的同時,也防止了諸…

劍指Offer(數據結構與算法面試題精講)C++版——day16

劍指Offer&#xff08;數據結構與算法面試題精講&#xff09;C版——day16 題目一&#xff1a;序列化和反序列化二叉樹題目二&#xff1a;從根節點到葉節點的路徑數字之和題目三&#xff1a;向下的路徑節點值之和附錄&#xff1a;源碼gitee倉庫 題目一&#xff1a;序列化和反序…

OpenCV 模板與多個對象匹配方法詳解(繼OpenCV 模板匹配方法詳解)

文章目錄 前言1.導入庫2.圖片預處理3.輸出模板圖片的寬和高4.模板匹配5.獲取匹配結果中所有符合閾值的點的坐標5.1 threshold 0.9&#xff1a;5.2 loc np.where(res > threshold)&#xff1a; 6.遍歷所有匹配點6.1 loc 的結構回顧6.2 loc[::-1] 的作用6.2.1 為什么需要反轉…

產品經理學習過程

一&#xff1a;掃盲篇&#xff08;初始產品經理&#xff09; 階段1&#xff1a;了解產品經理 了解產品經理是做什么的、產品經理的分類、產品經理在實際工作中都會接觸什么樣的崗位、以及產品經理在實際工作中具體要做什么事情。 二&#xff1a;準備篇 階段2&#xff1a;工…

【消息隊列RocketMQ】一、RocketMQ入門核心概念與架構解析

在當今互聯網技術飛速發展的時代&#xff0c;分布式系統的架構設計愈發復雜。消息隊列作為分布式系統中重要的組件&#xff0c;在解耦應用、異步處理、削峰填谷等方面發揮著關鍵作用。RocketMQ 作為一款高性能、高可靠的分布式消息中間件&#xff0c;被廣泛應用于各類互聯網場景…

從“鏈主”到“全鏈”:供應鏈數字化轉型的底層邏輯

1. 制造業與供應鏈數字化轉型的必然性 1.1. 核心概念與戰略重要性 制造業的數字化轉型&#xff0c;是利用新一代數字技術&#xff08;如工業互聯網、人工智能、大數據、云計算、邊緣計算等&#xff09;對制造業的整體價值鏈進行根本性重塑的過程。這不僅涉及技術的應用&#…

x-ui重新申請ssl證書失敗

由于某些需要我們重新申請ssl證書&#xff0c;x-ui自動化腳本不能強制更新&#xff0c;根據x-ui倉庫源碼&#xff1a; https://github.com/vaxilu/x-ui/blob/main/x-ui.sh 在申請ssl證書的地方稍作修改&#xff0c;得到&#xff0c;運行下面的腳本就可以重新申請ssl證書&#…

Java NIO Java 虛擬線程(微線程)與 Go 協程的運行原理不同 為何Go 能在低配機器上承接10萬 Websocket 協議連接

什么是Java NIO&#xff1f; Java NIO&#xff08;New Input/Output&#xff09; 是Java 1.4&#xff08;2002年&#xff09;引入的一種非阻塞、面向緩沖區的輸入輸出框架&#xff0c;旨在提升Java在高性能和高并發場景下的I/O處理能力。它相比傳統的 Java IO&#xff08;java…

go環境安裝mac

下載go安裝包&#xff1a;https://golang.google.cn/dl/ 找到對應自己環境的版本下載。 注意有二進制的包&#xff0c;也有圖形界面安裝的包。圖形界面直接傻瓜式點就行了。 二進制的按照下面操作&#xff1a; 1、下載二進制包。 2、將下載的二進制包解壓至 /usr/local目錄…

LVGL源碼(9):學會控件的使用(自定義彈窗)

LVGL版本&#xff1a;8.3 LVGL的控件各式各樣&#xff0c;每種控件都有自己的一些特性&#xff0c;當我們想要使用一個LVGL控件時&#xff0c;我們首先可以通過官網去了解控件的一些基本特性&#xff0c;官網鏈接如下&#xff1a; LVGL Basics — LVGL documentation&#xf…

《軟件設計師》復習筆記(1)——考試介紹【新】

目錄 一、考試介紹 證書價值 考試要求 二、【新】計算機與軟件工程知識 三、軟件設計 一、考試介紹 >考試科目>考題形式>考試時長>合格標準計算機與軟件工程知識75道單選題&#xff08;每題1分&#xff0c;總分75分&#xff09;2023年11月改革機試后&#…

MCU中的BSS和data都占用SRAM空間嗎?

在MCU中&#xff0c;BSS段和data段都占用SRAM空間&#xff0c;但它們的存儲方式和用途有所不同。? BSS段 BSS段&#xff08;Block Started by Symbol&#xff09;用于存儲未初始化的全局變量和靜態變量。這些變量在程序啟動時會被清零&#xff0c;因此它們不占用Flash空間&a…

Ubuntu 22.04 更換 Nvidia 顯卡后啟動無法進入桌面問題的解決

原顯卡為 R7 240, 更換為 3060Ti 后, 開機進桌面時卡在了黑屏界面, 鍵盤有反應, 但是無法進入 shell. 解決方案為 https://askubuntu.com/questions/1538108/cant-install-rtx-4060-ti-on-ubuntu-22-04-lts 啟動后在開機菜單中(如果沒有開機菜單, 需要按shift鍵), 進入recove…

Python爬蟲-爬取貓眼演出數據

前言 本文是該專欄的第53篇,后面會持續分享python爬蟲干貨知識,記得關注。 貓眼平臺除了有影院信息之外,它還涵蓋了演出信息,比如說“演唱會,音樂節,話劇音樂劇,脫口秀,音樂會,戲曲藝術,相聲”等等各種演出相關信息。 而本文,筆者將以貓眼平臺為例,基于Python爬蟲…

人工智能-機器學習(線性回歸,邏輯回歸,聚類)

人工智能概述 人工智能分為:符號學習&#xff0c;機器學習。 機器學習是實現人工智能的一種方法&#xff0c;深度學習是實現機器學習的一種技術。 機器學習&#xff1a;使用算法來解析數據&#xff0c;從中學習&#xff0c;然后對真實世界中是事務進行決策和預測。如垃圾郵件檢…

FPGA學習(五)——DDS信號發生器設計

FPGA學習(五)——DDS信號發生器設計 目錄 FPGA學習(五)——DDS信號發生器設計一、FPGA開發中常用IP核——ROM/RAM/FIFO1、ROM簡介2、ROM文件的設置&#xff08;1&#xff09;直接編輯法&#xff08;2&#xff09;用C語言等軟件生成初始化文件 3、ROM IP核配置調用 二、DDS信號發…

【Vue】從 MVC 到 MVVM:前端架構演變與 Vue 的實踐之路

個人博客&#xff1a;haichenyi.com。感謝關注 一. 目錄 一–目錄二–架構模式的演變背景?三–MVC&#xff1a;經典的分層起點?四–MVP&#xff1a;面向接口的解耦嘗試?五–MVVM&#xff1a;數據驅動的終極形態??六–Vue&#xff1a;MVVM 的現代化實踐??? 二. 架構模…