jvm-sandbox-repeater 錄制和回放

https://github.com/alibaba/jvm-sandbox-repeater/blob/master/docs/user-guide-cn.md

快速錄制自己應用


step0 安裝sandbox和插件到應用服務器


curl -s https://github.com/alibaba/jvm-sandbox-repeater/releases/download/v1.0.0/install-repeater.sh | sh


step1 修改repeater-config.json,啟用攔截點和插件信息


根據需要修改repeater-config.json配置文件,具體配置含義參見:RepeaterConfig.java

repeater-config.json默認下載在~/.sandbox-module/cfg/repeater-config.json

本使用手冊是單機方式使用,實際項目應用時,配置文件需要從服務端拉取,配置變更時服務端推送到對應模塊,框架也提供了拉取和推送配置接口。

{
"degrade": false,
"exceptionThreshold": 1000,
"httpEntrancePatterns": [
"^/regress/.*$"
],
"javaEntranceBehaviors": [
],
"javaSubInvokeBehaviors": [
],
"pluginIdentities": [
"http",
"mybatis",
"ibatis",
"dubbo-provider",
"dubbo-consumer"
],
"repeatIdentities": [
"java",
"http"
],
"sampleRate": 10000,
"useTtl": true
}

2啟動目標應用,以查看進程號

ao@ubuntu2004:~/Documents$ java -jar demo-helloworld.jar

. ____ _ __ _ _

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v2.1.0.RELEASE)

查看當前的java 認為的pid

# 使用 jps 查找進程 ID
jps -l


step3 attach sandbox到目標進程


cd ~/sandbox/bin

假設目標JVM進程號為'2343'

./sandbox.sh -p 2343 -P 12580
如果控制臺輸出,則說明啟動成功

                NAMESPACE : defaultVERSION : 1.2.1MODE : ATTACHSERVER_ADDR : 0.0.0.0SERVER_PORT : 12580UNSAFE_SUPPORT : ENABLESANDBOX_HOME : /Users/froggen/sandboxSYSTEM_MODULE_LIB : /Users/froggen/sandbox/moduleUSER_MODULE_LIB : ~/.sandbox-module;SYSTEM_PROVIDER_LIB : /Users/froggen/sandbox/providerEVENT_POOL_SUPPORT : DISABLE

2:step2 attach sandbox到目標進程,

./sandbox.sh -p 7641 -P 12581

java.lang.NoClassDefFoundError: com/sun/tools/attach/VirtualMachine

at com.alibaba.jvm.sandbox.core.CoreLauncher.attachAgent(CoreLauncher.java:59)

at com.alibaba.jvm.sandbox.core.CoreLauncher.<init>(CoreLauncher.java:20)

at com.alibaba.jvm.sandbox.core.CoreLauncher.main(CoreLauncher.java:43)

Caused by: java.lang.ClassNotFoundException: com.sun.tools.attach.VirtualMachine

at java.net.URLClassLoader.findClass(URLClassLoader.java:387)

at java.lang.ClassLoader.loadClass(ClassLoader.java:418)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)

at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

... 3 more

sandbox load jvm failed : com.sun.tools.attach.VirtualMachine

attach JVM 7641 fail.

報錯需要設置java homeexport JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64  # 替換為實際路徑export PATH=$PATH:/usr/local/armtool/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
export PATH=$PATH:/home/gao/imx_linux/arm_book/env_cmd
export PATH=$JAVA_HOME/bin:$PATH

關閉sanbox

查看日志

tail -200f ~/logs/sandbox/repeater/repeater.log
2025-07-15 14:46:18 INFO  initializing logback success. file=/home/gao/.sandbox-module/cfg/repeater-logback.xml;
2025-07-15 14:46:18 INFO  module on loaded,id=repeater,version=1.0.0,mode=AGENT
2025-07-15 14:46:18 INFO  onActive
2025-07-15 14:46:19 INFO  pull repeater config success,config={sampleRate=10000, plugin=[http, mybatis, ibatis, dubbo-provider, dubbo-consumer]}
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:19 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:20 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:20 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:20 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:20 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:20 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:20 INFO  http required javax.servlet.http.HttpServlet class router,waiting for class loading
2025-07-15 14:46:20 INFO  using target class loader to load plugin,class=Routing{regexExpresses=[^javax.servlet..*], classLoader=org.springframework.boot.loader.LaunchedURLClassLoader@52af26ee}
2025-07-15 14:46:20 WARN  no valid classloader found in routing,routing=PluginClassRouting{targetClass='org.apache.dubbo.rpc.model.ApplicationModel', classPattern='^org.apache.dubbo..*', identity='dubbo', matcher=REPEATER, block=false}
2025-07-15 14:46:20 INFO  enable plugin ibatis success
2025-07-15 14:46:20 INFO  add watcher success,type=ibatis,watcherId=1000
2025-07-15 14:46:20 INFO  enable plugin dubbo-consumer success
2025-07-15 14:46:20 INFO  add watcher success,type=dubbo,watcherId=1002
2025-07-15 14:46:20 INFO  add watcher success,type=dubbo,watcherId=1004
2025-07-15 14:46:20 INFO  enable plugin dubbo-provider success
2025-07-15 14:46:20 INFO  add watcher success,type=dubbo,watcherId=1006
2025-07-15 14:46:20 INFO  add watcher success,type=dubbo,watcherId=1008
2025-07-15 14:46:20 INFO  enable plugin http success
2025-07-15 14:46:21 INFO  add watcher success,type=http,watcherId=1010
2025-07-15 14:46:21 INFO  enable plugin mybatis success
2025-07-15 14:46:21 INFO  add watcher success,type=mybatis,watcherId=1013
2025-07-15 14:46:21 INFO  register event bus success in repeat-register
2025-07-15 15:27:03 INFO  initializing logback success. file=/home/gao/.sandbox-module/cfg/repeater-logback.xml;
2025-07-15 15:27:03 INFO  module on loaded,id=repeater,version=1.0.0,mode=ATTACH
2025-07-15 15:27:03 INFO  onActive
2025-07-15 15:27:03 INFO  pull repeater config success,config={sampleRate=10000, plugin=[http, mybatis, ibatis, dubbo-provider, dubbo-consumer]}
2025-07-15 15:27:03 INFO  using target class loader to load plugin,class=Routing{regexExpresses=[^javax.servlet..*], classLoader=org.springframework.boot.loader.LaunchedURLClassLoader@238e0d81}
2025-07-15 15:27:03 WARN  no valid classloader found in routing,routing=PluginClassRouting{targetClass='org.apache.dubbo.rpc.model.ApplicationModel', classPattern='^org.apache.dubbo..*', identity='dubbo', matcher=REPEATER, block=false}
2025-07-15 15:27:03 INFO  enable plugin ibatis success
2025-07-15 15:27:03 INFO  add watcher success,type=ibatis,watcherId=1000
2025-07-15 15:27:03 INFO  enable plugin dubbo-consumer success
2025-07-15 15:27:04 INFO  add watcher success,type=dubbo,watcherId=1002
2025-07-15 15:27:04 INFO  add watcher success,type=dubbo,watcherId=1004
2025-07-15 15:27:04 INFO  enable plugin dubbo-provider success
2025-07-15 15:27:04 INFO  add watcher success,type=dubbo,watcherId=1006
2025-07-15 15:27:04 INFO  add watcher success,type=dubbo,watcherId=1008
2025-07-15 15:27:04 INFO  enable plugin http success
2025-07-15 15:27:04 INFO  add watcher success,type=http,watcherId=1010
2025-07-15 15:27:04 INFO  enable plugin mybatis success
2025-07-15 15:27:04 INFO  add watcher success,type=mybatis,watcherId=1013
2025-07-15 15:27:04 INFO  register event bus success in repeat-register

# 檢查是否附加成功

curl -s "http://127.0.0.1:12581/sandbox/default/module/http/sandbox-module-mgr/list" | jq .

http://127.0.0.1:12581/sandbox/default/module/http/sandbox-module-mgr/list

網站輸入這個地址

# 預期返回已加載模塊列表

step3 開始錄制?如何錄制-沒有成功收到錄制數據

根據自己配置的協議,HTTP/Java/Dubbo進行請求錄制,如錄制成功在repeater.log會打出具體的TraceId,同時在~/.sandbox-module/repeater-data/record/文件中會寫入TraceId關聯的錄制數據;

錄制成功-生成文件

如果錄制成功,是因為設置了規則,只錄制帶有

"^/regress/.*$",

而之前,官方例子,是帶有regress 的

配置要監控的API的路徑

再訪問http://localhost:8080/demo/hello

http://127.0.0.1:8080/demo/hello?who=Alice

就能再日志看到

025-07-16 17:19:54 INFO broadcast success,traceId=127000001001175265759374910001ed,resp=success

2025-07-16 17:19:57 INFO broadcast success,traceId=127000001001175265759717110002ed,resp=success

2025-07-16 17:19:58 INFO broadcast success,traceId=127000001001175265759867410003ed,resp=success

回放驗證:但是這個路徑每次時間都變化

  1. bash復制下載

回放的路徑和錄制時候訪問的路徑一樣

只不過最后加traceid

curl -s 'http://127.0.0.1:8080/demo/hello?Repeat-TraceId-X=127000001001175265759867410003ed'
Hello, World!gao@ubuntu2004:~$ curl -s 'http://127.0.0.1:8080/demo/hello?Repeat-TraceId-X=127000001001175265759867410003ed'
Hello, World!gao@ubuntu2004:~$ curl -s 'http://127.0.0.1:8080/demo/hello?Repeat-TraceId-X=127000001001175265759867410003ed'
Hello, World!gao@ubuntu2004:~$ 

2. 發送回放請求(關鍵!)

必須通過 HTTP Header 傳遞TraceId,而不是URL參數:

http://127.0.0.1:8080/demo/hello?who=Alice

curl -H "Repeat-TraceId-X: 127000001001175271587488610002ed" \
http://127.0.0.1:8080/demo/hello?who=Alice

回放指令

curl -H "Repeat-TraceId-X: 127000001001175271663843110001ed" http://127.0.0.1:8080/demo/hello?who=Alice

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

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

相關文章

【C++底層剖析】++a vs a++:到底誰是左值,誰是右值?

在 C 編程中&#xff0c;我們經常使用 a 和 a 來實現自增操作。乍一看它們只是“先加還是后加”的語法糖&#xff0c;但你真的理解它們的底層機制、返回值類型和左值右值屬性嗎&#xff1f;1. a 和 a 的基礎區別表達式名稱語義返回值類型左值 / 右值a前置自增先將 a 加 1&#…

【世紀龍科技】汽車故障診斷與排除仿真教學軟件讓課堂更高效安全

隨著汽車產業向智能化、電動化快速轉型&#xff0c;職業院校汽修專業的教學模式正面臨全新挑戰。傳統實車實訓存在成本高、風險大、場景單一等問題&#xff0c;而行業對人才的要求卻越來越高——既需要扎實的理論基礎&#xff0c;又必須具備熟練的故障診斷能力。如何在保證安全…

網絡基礎9:按流負載均衡實驗(等價路由)

實驗eNS拓撲圖&#xff1a;1. 網絡拓撲與 IP 配置AR5&#xff1a;GE0/0/0: 192.168.1.1/24&#xff08;連接 AR6&#xff09;GE0/0/1: 192.168.3.1/24&#xff08;連接 AR8&#xff09;Loopback0: 1.1.1.1/32&#xff08;源地址&#xff09;AR6&#xff1a;GE0/0/0: 192.168.1.…

4G模塊 A7680發送中文短信到手機

命令說明 基礎AT指令 ATi顯示產品的標志信息 ATCIMI查詢IMSI ATCICCID從SIM卡讀取ICCID ATCGSN查詢產品序列號 ATCPIN查詢卡狀態 ATCSQ查詢信號強度 ATCGATT查詢當前PS域狀態 ATCREG查詢GPRS注冊狀態 ATCEREG查詢4G注冊狀態 ATCGPADDR查詢PDP地址 ATCMGF選擇短信格式 ATCMGS發…

深度學習-線性神經網絡

文章目錄線性回歸基本概念隨機梯度下降矢量化加速正態分布和平方損失極大似然估計線性回歸實現從0開始**torch.no_grad()的兩種用途****為什么需要 l.sum().backward()&#xff1f;**調用現成庫softmax回歸圖像數據集從0開始實現softmax利用框架API實現課程學習自李牧老師B站的…

【王樹森推薦系統】推薦系統漲指標的方法04:多樣性

漲指標的方法有哪些&#xff1f; 改進召回模型&#xff0c;添加新的召回模型改進粗排和精排模型提升召回&#xff0c;粗排&#xff0c;精排的多樣性特殊對待新用戶嗎&#xff0c;低活用戶等特殊人群利用關注&#xff0c;轉發&#xff0c;評論這三種交互行為 排序的多樣性 精排多…

1. Spring AI概述

一、前言 Spring AI 是由 Spring 團隊推出的開源項目&#xff0c;旨在為 Java 開發者提供簡潔、一致的 Spring 風格開發體驗&#xff0c;用于構建基于生成式人工智能&#xff08;GenAI&#xff09;和大型語言模型&#xff08;LLM&#xff09;的應用程序。它通過標準化抽象層簡…

[每日隨題10] DP - 重鏈剖分 - 狀壓DP

整體概述 難度&#xff1a;1600 →\rightarrow→ 2200 →\rightarrow→ 2600 P6005 [USACO20JAN] Time is Mooney G 標簽&#xff1a;DP 前置知識&#xff1a;鏈式前向星 難度&#xff1a;綠 1600 題目描述&#xff1a; 輸入格式&#xff1a; 輸出格式&#xff1a; 樣例輸…

【Ubuntu22.04】repo安裝方法

背景 repo是Google開發的用于基于git管理Android版本庫的一個工具&#xff0c;管理多個Git倉庫的工具&#xff0c;它可以幫助您在一個代碼庫中管理多個Git倉庫的代碼。其在鴻蒙操作系統中大量使用。下面我們就介紹repo在wsl中的安裝部署。 安裝方法 使用中國科技大學資源 腳本i…

Vue3的definePros和defineEmits

在 Vue 3 中&#xff0c;defineProps 和 defineEmits 是組合式 API 中用于定義組件的 props 和 事件 的方法&#xff0c;提供了一種更簡潔和明確的方式來管理組件的輸入和輸出。它們屬于 Composition API 的一部分&#xff0c;在 Vue 2 中通常使用 props 和 $emit 來實現。1. d…

【華為機試】122. 買賣股票的最佳時機 II

文章目錄122. 買賣股票的最佳時機 II描述示例 1示例 2示例 3提示解題思路核心觀察關鍵洞察算法實現方法1&#xff1a;貪心算法&#xff08;推薦&#xff09;方法2&#xff1a;動態規劃方法3&#xff1a;動態規劃&#xff08;空間優化&#xff09;方法4&#xff1a;波峰波谷法算…

Spring MVC @RequestParam注解全解析

RequestParam 注解詳解 RequestParam 是 Spring MVC 中最常用的注解之一&#xff0c;用于從 HTTP 請求中提取查詢參數&#xff08;Query String&#xff09;或表單數據。它主要處理 application/x-www-form-urlencoded 類型的請求&#xff08;如 GET 請求或 POST 表單提交&…

從零掌握XML與DTD實體:原理、XXE漏洞攻防

本文僅用于技術研究&#xff0c;禁止用于非法用途。 Author:枷鎖 文章目錄一、XML基礎1. 什么是XML&#xff1f;2. XML語法規則3. 數據類型二、DTD1. 認識DTD2. 聲明DTD3. DTD實體4. 如何防御XXE攻擊&#xff1f;5. 總結一、XML基礎 1. 什么是XML&#xff1f; XML &#xff1…

.NET 8 Release Candidate 1 (RC1)現已發布,包括許多針對ASP.NET Core的重要改進!

.NET 8 Release Candidate 1 (RC1)發布&#xff1a;ASP.NET Core重大改進來襲&#xff01; 近日&#xff0c;.NET 8 Release Candidate 1 (RC1)正式發布&#xff0c;這是在今年晚些時候計劃發布的最終 .NET 8 版本之前的兩個候選版本中的第一個。此版本包含了大部分計劃中的功…

Jenkins pipeline 部署docker通用模板

Jenkinsfile: Docker的NETWORK_NAME不要使用bridge默認網絡&#xff0c;要使用自定義的網絡如test默認 bridge 網絡&#xff1a;容器間不能用名字互相訪問&#xff0c;只能用 IP。自定義網絡&#xff1a;容器間可以用名字互相訪問&#xff0c;Docker 自動做了 DNS 解析。pipeli…

【每日算法】專題十五_BFS 解決 FloodFill 算法

1. 算法思想 Flood Fill 問題的核心需求 給定一個二維網格&#xff08;如像素矩陣&#xff09;、一個起始坐標 (x, y) 和目標顏色 newColor&#xff0c;要求&#xff1a; 將起始點 (x, y) 的顏色替換為 newColor。遞歸地將所有與起始點相鄰&#xff08;上下左右&#xff09; …

ESLint 完整功能介紹和完整使用示例演示

以下是ESLint的完整功能介紹和完整使用示例演示&#xff1a; ESLint 完整功能介紹 一、核心功能靜態代碼分析&#xff1a; 通過解析JavaScript/TypeScript代碼為抽象語法樹&#xff08;AST&#xff09;&#xff0c;識別語法錯誤、潛在問題&#xff08;如未定義變量、未使用變量…

解決問題七大步驟

發現問題后尋找解決方案的流程可以細化為 7個核心步驟&#xff0c;每個步驟包含具體措施、信息源和關鍵技巧&#xff0c;形成“從自查到驗證、從獨立解決到尋求幫助”的完整閉環。以下是完善后的流程&#xff1a; 一、明確問題與初步自查&#xff08;前提&#xff1a;減少無效搜…

思維鏈(CoT)技術全景:原理、實現與前沿應用深度解析

一、核心概念與原理 定義與起源 CoT 是一種引導大語言模型&#xff08;LLM&#xff09;顯式生成中間推理步驟的技術&#xff0c;通過模擬人類逐步解決問題的過程&#xff0c;提升復雜任務&#xff08;如數學證明、多步邏輯推理&#xff09;的準確性。該概念由 Google Brain 團…

實驗-華為綜合

華為綜合實驗 一 實驗拓撲二 實驗配置交換機2 vlan batch 10 20 int e0/0/2 port link-type access port default vlan 10 int e0/0/1 port link-type access port default vlan 20 int e0/0/3 port link-type trunk port trunk allow-pass vlan alltelnet交換機3 鏈路類型配置…