SpringBoot Arthas實現(xiàn)線上監(jiān)控診斷
Arthas 是一款線上監(jiān)控診斷產(chǎn)品,通過全局視角實時查看應(yīng)用 load、內(nèi)存、gc、線程的狀態(tài)信息,并能在不修改應(yīng)用代碼的情況下,對業(yè)務(wù)問題進行診斷,包括查看方法調(diào)用的出入?yún)ⅰ惓?,監(jiān)測方法執(zhí)行耗時,類加載信息等,大大提升線上問題排查效率。
一、Spring Boot 集成 Arthas
通過官方的工具 Arthas Spring Boot Starter 集成到 Spring Boot 項目中,可以非常方便的使用 Arthas。
在我們自己的項目中引入 Arthas 的 starter,在啟動 Spring Boot 自身應(yīng)用的同時,Spring 會啟動 Arthas,并且 attach 自身進程。
最后通過暴露 Arhtas 終端的端口的方式,方便用戶進入到 Arthas 的終端進行調(diào)試。 集成后用戶不再需要去 Arthas 的官網(wǎng)下載 Arthas 的安裝包,也不需將 Arthas 的安裝包拷貝到應(yīng)用容器中。
1、項目集成
1、配置 maven 依賴
<!-- Arthas Spring Boot Starter -->
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-spring-boot-starter</artifactId>
<version>4.1.3</version>
</dependency>2、配置屬性
arthas: # Telnet 連接端口,用于通過 Telnet 客戶端連接 Arthas telnet-port:3658 # HTTP 服務(wù)端口,用于通過瀏覽器訪問 Arthas Web Console http-port:8563
- telnet-port: 暴露這個端口是為了支持用戶通過 telnet 的方式進入 arhtas 的終端進行遠程調(diào)試。
- http-port: 暴露這個端口是為了支持用戶通過瀏覽器的方式進入 arhtas 的終端進行遠程調(diào)試。
2、使用 Arhtas
經(jīng)過上述的配置,Spring Boot 項目啟動時,會自動啟動 Arthas,并 attach 自身進程。啟動項目控制臺日志如下:
c.a.arthas.spring.ArthasConfiguration : Arthas agent start success.
1、通過 telnet 進入 arhtas 終端
接下來通過 telnet 命令,可以進入 Arthas 的終端進行遠程調(diào)試。使用配置文件配置的 telnet-port: 3658 端口。如下所示:
telnet localhost 3658

接下來就可以在 arthas 終端執(zhí)行各種 arthas 指令調(diào)試代碼,詳細(xì)使用方法可以參考 Arthas 文檔。如 dashboard :

整個過程操作下來不需要像原始的從官網(wǎng)下載 arhtas 安裝包,然后執(zhí)行 java -java arthas-boot.jar 的指令進入到 arhtas 終端。
通過集成到自有項目中直接一個 telnet 指令就可以直接進入到終端,比之前的方式簡單多了。
2、通過瀏覽器進入 arhtas 終端
接下來通過瀏覽器,可以進入 Arthas 的 Web Console。使用配置文件配置的 http-port: 8563 端口。如下所示:

3、遠程使用 Arthas
在生產(chǎn)環(huán)境中,自有 Spring Boot 項目部署在服務(wù)器上,然后再使用 arthas 進行遠程調(diào)試,要額外開啟訪問配置,注意會有安全風(fēng)險。
arthas: # Telnet 連接端口,用于通過 Telnet 客戶端連接 Arthas telnet-port:3658 # HTTP 服務(wù)端口,用于通過瀏覽器訪問 Arthas Web Console http-port:8563 # 127.0.0.1 只能本地訪問,0.0.0.0 則可網(wǎng)絡(luò)訪問,但是存在安全問題,需謹(jǐn)慎使用。 ip:0.0.0.0
二、Arthas Tunnel 增強
現(xiàn)如今項目在采用微服務(wù)架構(gòu)時,會有無數(shù)個 Spring Boot 應(yīng)用,每個應(yīng)用都有一個 Arthas 客戶端,這樣會使得 Arthas 操作變得些許麻煩。
我們需要實時維護所有服務(wù)節(jié)點的地址,當(dāng)需要遠程調(diào)試某個節(jié)點時,首先需要找到對應(yīng)節(jié)點的 ip 地址,再通過瀏覽器去訪問該節(jié)點的調(diào)試頁面進行調(diào)試。
當(dāng)服務(wù)節(jié)點數(shù)量變多時,這個過程會非常麻煩,因此,Arthas 引入了 Arthas Tunnel,Arthas Tunnel 是一個服務(wù)端。 Arthas Tunnel有點類似于“注冊中心”管理所有的 Arthas 客戶端。
如在流式計算里,Java 進程可以是在不同的機器啟動的,想要使用 Arthas 去診斷會比較麻煩,因為用戶通常沒有機器的權(quán)限,即使登錄機器也分不清是哪個Java 進程。
在這種情況下,可以使用 Arthas Tunnel Server/Client。通過 Arthas Tunnel Server/Client 來遠程管理/連接多個 Agent。
1、Arthas Tunnel Server
首先需要到 GitHub 下載 Arthas Tunnel Server 并啟動。 https://github.com/alibaba/arthas/releases
注意點是下載的版本最好和 arthas-spring-boot-starter 這兩個版本最好保持一致,減少不必要的兼容問題。
執(zhí)行 java -jar -Darthas.enable-detail-pages=true arthas-tunnel-server-4.1.3-fatjar.jar 即可啟動 arthas-tunnel-server。
參數(shù) Darthas.enable-detail-pages=true 是開啟 Tunnel Server 的管理頁面。如果不配置,是無法通過頁面看到所有的 arthas 客戶端的。
注意:開放管理頁面有風(fēng)險!管理頁面沒有安全攔截功能,務(wù)必自行增加安全措施,不要開放到公網(wǎng)。
可以通過 http://127.0.0.1:8080/actuator/arthas 查看到具體的連接信息,登錄用戶名是 arthas,密碼在 Tunnel Server的日志里可以找到,比如:
2025-12-26 11:34:40.524 WARN 3740 --- [ main] .s.s.UserDetailsServiceAutoConfiguration : Using generated security password: a0ab4417-6c43-4c21-a19a-9888c2d123e4 This generated password is for development use only. Your security configuration must be updated before running your application in production.
可以通過啟動命令修改配置文件:
-Dserver.port修改指定 web 端口-Darthas.server.port指定注冊端口
下面的命令就是將 web 端口設(shè)置為 8081,注冊端口設(shè)置為 8888
java -jar -Dserver.port=8081 -Darthas.server.port=8888 -Darthas.enable-detail-pages=true arthas-tunnel-server-4.1.3-fatjar.jar
2、Arthas Tunnel Client
現(xiàn)在需要在自有的 Spring Boot 項目中配置 arthas 參數(shù),告訴 arthas 客戶端需要將自己的地址注冊到 Tunnel Server。
spring:
application:
name:springboot-11-arthas
arthas:
# Telnet 連接端口,用于通過 Telnet 客戶端連接 Arthas
telnet-port:-1
# HTTP 服務(wù)端口,用于通過瀏覽器訪問 Arthas Web Console
http-port:-1
# 127.0.0.1 只能本地訪問,0.0.0.0 則可網(wǎng)絡(luò)訪問,但是存在安全問題,需謹(jǐn)慎使用。
#ip: 0.0.0.0
# 應(yīng)用名稱,用于標(biāo)識應(yīng)用
app-name:${spring.application.name}
# 默認(rèn)情況下,會生成隨機ID,如果 arthas agent 配置了 appName,則生成的 agentId 會帶上 appName 的前綴。
# 注意,agentId 要保持唯一,否則會在 tunnel server 上沖突,不能正常工作
agent-id:${spring.application.name}_Don001
# tunnel-server 地址,Arthas 隧道服務(wù)器地址,用于連接 Arthas 隧道服務(wù)器
tunnel-server:ws://127.0.0.1:7777/ws因為不需要像上述那樣通過 arthas 客戶端的 http 端口或 telnet 端口訪問 arhtas 終端,所以將 telnet-port 和 http-port 都設(shè)置為-1,表示禁用 http 和 telnet 單獨連接 arthas 客戶端,后續(xù)統(tǒng)一使用 Arthas Tunnel Server 進行連接并操作。
啟動兩個應(yīng)用,可以看到 Tunnel Server 中有新的連接:
2025-12-26 11:51:23.006 INFO 3740 --- [Server-boss-1-1] io.netty.handler.logging.LoggingHandler : [id: 0x72e2f7a6, L:/0:0:0:0:0:0:0:0:7777] READ: [id: 0xee929d2a, L:/127.0.0.1:7777 - R:/127.0.0.1:51404] 2025-12-26 11:51:23.007 INFO 3740 --- [Server-boss-1-1] io.netty.handler.logging.LoggingHandler : [id: 0x72e2f7a6, L:/0:0:0:0:0:0:0:0:7777] READ COMPLETE 2025-12-26 11:51:23.098 INFO 3740 --- [rver-worker-3-2] c.a.a.t.server.TunnelSocketFrameHandler : websocket handshake complete, uri: /ws?method=agentRegister&arthasVersion=4.1.3&appName=springboot-11-arthas&id=Don 2025-12-26 11:53:09.824 INFO 3740 --- [Server-boss-1-1] io.netty.handler.logging.LoggingHandler : [id: 0x72e2f7a6, L:/0:0:0:0:0:0:0:0:7777] READ: [id: 0xcc24edb0, L:/127.0.0.1:7777 - R:/127.0.0.1:51506] 2025-12-26 11:53:09.824 INFO 3740 --- [Server-boss-1-1] io.netty.handler.logging.LoggingHandler : [id: 0x72e2f7a6, L:/0:0:0:0:0:0:0:0:7777] READ COMPLETE 2025-12-26 11:53:09.839 INFO 3740 --- [rver-worker-3-3] c.a.a.t.server.TunnelSocketFrameHandler : websocket handshake complete, uri: /ws?method=agentRegister&arthasVersion=4.1.3&appName=springboot-11-arthas&id=Don2
然后訪問管理頁面查看所有已連接的 arthas 客戶端,管理頁面地址是:服務(wù)器ip:端口號/apps.html。顯示如下圖所示:

注:如果要自定義配置 agent-id 參數(shù),則必須包含 _ 符號,且同服務(wù)實例需要相同的前綴,類似自動生成的規(guī)則。
具體見源碼 com.alibaba.arthas.tunnel.server.app.web#tunnelApps
點擊服務(wù) springboot-11-arthas,進入服務(wù)的實例頁面,顯示如下圖所示:

點擊某一實例,進入實例頁面,顯示如下圖所示:

3、認(rèn)證
可以在配置文件里添加 arthas.username 和 arthas.password 來設(shè)置用戶名和密碼,然后訪問管理頁面時需要輸入用戶名和密碼。
arthas:
# Telnet 連接端口,用于通過 Telnet 客戶端連接 Arthas
telnet-port:-1
# HTTP 服務(wù)端口,用于通過瀏覽器訪問 Arthas Web Console
http-port:-1
# 127.0.0.1 只能本地訪問,0.0.0.0 則可網(wǎng)絡(luò)訪問,但是存在安全問題,需謹(jǐn)慎使用。
#ip: 0.0.0.0
# 應(yīng)用名稱,用于標(biāo)識應(yīng)用
app-name:${spring.application.name}
# 默認(rèn)情況下,會生成隨機ID,如果 arthas agent 配置了 appName,則生成的 agentId 會帶上 appName 的前綴。
# 注意,agentId 要保持唯一,否則會在 tunnel server 上沖突,不能正常工作
#agent-id: Don
# tunnel-server 地址,Arthas 隧道服務(wù)器地址,用于連接 Arthas 隧道服務(wù)器
tunnel-server:ws://127.0.0.1:7777/ws
username:admin
password:admin首先需要在終端使用 auth 指令進行認(rèn)證,認(rèn)證通過后才能執(zhí)行其他 arthas 指令, 執(zhí)行 auth -username admin admin 通過 arhtas 的認(rèn)證,然后執(zhí)行 session 指令查看當(dāng)前 session 的信息:
[arthas@15432]$ session Error! command not permitted, try to use 'auth'command to authenticates. [arthas@15432]$ auth Authentication result: false, Need authentication: true [arthas@15432]$ auth -username admin admin Authentication result: true, username: admin [arthas@15432]$ auth Authentication result: true, Need authentication: true [arthas@15432]$ session Name Value ------------------------------------------------------------- JAVA_PID 15432 SESSION_ID c7929c0c-0d30-4563-827b-1babeff98f7c AGENT_ID springboot-11-arthas_SX0SZK8T5ZJWUYPJOMOJ TUNNEL_SERVER ws://127.0.0.1:7777/ws TUNNEL_CONNECTED true [arthas@15432]$
三、總結(jié)
1、首先講述了自有的 Spring Boot 應(yīng)用集成 Arthas Spring Boot Starter 的方式,便于快速使用 Arthas 進行調(diào)試。
2、然后借助 Arthas Tunnel Server/Client 來遠程管理/連接多個服務(wù)器下的 Java 服務(wù),輕松實現(xiàn)多個服務(wù)器下的 Java 服務(wù)的遠程調(diào)試。
注:Tunnel Server 開放管理頁面有風(fēng)險?。?!管理頁面沒有安全攔截功能,務(wù)必自行增加安全措施,不要開放到公網(wǎng)。
到此這篇關(guān)于SpringBoot Arthas實現(xiàn)線上監(jiān)控診斷的文章就介紹到這了,更多相關(guān)SpringBoot Arthas線上監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Instrumentation從概念到基本用法詳解
Java Instrumentation是java.lang.instrument包提供的 API,允許開發(fā)者在類被JVM 加載時對其進行修改,或者在運行時重新定義類的字節(jié)碼,本文給大家介紹Java Instrumentation從概念到基本用法詳解,感興趣的朋友一起看看吧2025-09-09
java讀取文件內(nèi)容的三種方法代碼片斷分享(java文件操作)
本文介紹java讀取文件內(nèi)容的三種方法,代碼可以直接放到程序中使用,大家參考使用吧2014-01-01
從零開始使用IDEA創(chuàng)建SpringBoot項目(圖文)
這篇文章主要介紹了從零開始使用IDEA創(chuàng)建SpringBoot項目(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
Java 高并發(fā)二:多線程基礎(chǔ)詳細(xì)介紹
本文主要介紹Java 高并發(fā)多線程的知識,這里整理詳細(xì)的資料來解釋線程的知識,有需要的學(xué)習(xí)高并發(fā)的朋友可以參考下2016-09-09
帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-08-08
基于Java實現(xiàn)Word中插入附件的操作指南(支持所有文件格式)
文章介紹了如何使用Java在Word文檔中嵌入附件,并通過OLE方式實現(xiàn),主要步驟包括:引入依賴、組裝附件圖標(biāo)、默認(rèn)附件圖標(biāo)、組裝Ole對象、插入附件到Word文檔以及使用模板,文章末尾提供了實現(xiàn)代碼和下載OLE模板的鏈接,需要的朋友可以參考下2025-12-12

