引流回放这个技术现在真的越来越成为了很多公司测试同学必备的一个工具了。当然引流回放的技术有很多,比如下来会提到的jvm-sandbox-repeater。 当然你也可以通过日志分析解析的方式去获取到请求返回的信息等。因为刚听过testerhome开发者大会,好几个主题也讨论到了引流回放,而现在大热的引流回放就是 https://github.com/alibaba/jvm-sandbox-repeater

引流回放面向的目标人群 - 面向测试开发工程师

  • 线上有个用户请求一直不成功,我想在测试环境Debug一下,能帮我复现一下吗?
  • 压测流量不知道怎么构造,数据结构太复杂,压测模型也难以评估,有什么好的办法吗?
  • 不想写接口测试脚本了,我想做一个流量录制系统,把线上用户场景做业务回归,可能会接入很多服务系统,不想让每个系统都进行改造,有好的框架选择吗?
  • 我想做一个业务监控系统,对线上核心接口采样之后做一些业务校验,实时监控业务正确性。

我们就按照官网的操作步骤来吧。不过有些地方我们得适当修改下,不确定这些是否适合其他同学哈。

1. 安装sandbox以及repeater

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

注: 这种方式安装的的repeater 没有办法被sandbox 识别出来,导致repeater的插件一直没办法被加载

所以推荐是直接通过拉取repeater的源码

git clone https://github.com/alibaba/jvm-sandbox-repeater.gitcd jvm-sandbox-repeater/binsh install-local.sh

install-local.sh

#!/usr/bin/env bash# repeater's target dir
REPEATER_TARGET_DIR=../target/repeater# exit shell with err_code
# $1 : err_code
# $2 : err_msg
exit_on_err()
{[[ ! -z "${2}" ]] && echo "${2}" 1>&2exit ${1}
}# package
sh ./package.sh || exit_on_err 1 "install failed cause package failed"# extract sandbox to ${HOME}
curl -s https://ghproxy.com/https://github.com/alibaba/jvm-sandbox-repeater/releases/download/v1.0.0/sandbox-1.3.3-bin.tar | tar x -C ${HOME} || exit_on_err 1 "extract sandbox failed"# copy module to ~/.sandbox-module
mkdir -p ${HOME}/.sandbox-module || exit_on_err 1 "permission denied, can not mkdir ~/.sandbox-module"
cp -r ${REPEATER_TARGET_DIR}/* ${HOME}/.sandbox-module  || exit_on_err 1 "permission denied, can not copy module to ~/.sandbox-module"

install-local.sh的脚本如上,其他它与上述的sh脚本的区别在于 repeater它是直接通过源码打包的,其他都是一样的,所以只能有理由怀疑的是repeater的问题。导致了插件没有办法被加载。具体可以看下,我通过官方的脚本安装以及通过源码安装后执行sandbox.sh的日志差异

这个是根据官方的方式安装的,加载完module-jar以后就直接进行端口绑定了。

通过源码打包的方式,就会出现加载module-lib的逻辑,所以这个就是具体的差异的地方,这个问题会直接repeater完全没有启动。这个原因下来再说为啥会有这个情况

先解释下上边的脚本,脚本的主要作用就是安装sandbox以及repeater, 而安装的路径分别是在 ~/sandbox 与 ~/.sandbox-module 。

2. 修改repeater的配置

这里我们先采用standalone的模式,所以我们需要修改~/.sandbox-module/cfg/repeater.properties的配置信息

改为true. 至于其上面的那些配置想都是配合repeater-console一起使用的,所以我们暂时可以先不用管

同时再修改repeater-config.json, 它默认是在~/.sandbox-module/cfg/repeater-config.json

具体配置含义参见:RepeaterConfig.java

这里我们将配置修改为如下:

{"degrade": false, "exceptionThreshold": 1000,"httpEntrancePatterns": ["^/greeting.*$", // 这里主要是录制接口为greeting的],"javaEntranceBehaviors": [],"javaSubInvokeBehaviors": [],"pluginIdentities": ["http","mybatis","ibatis","dubbo-provider","dubbo-consumer"],"repeatIdentities": ["java","http"],"sampleRate": 10000,"useTtl": true
}

启动被测服务

克隆源码

git clone https://github.com/chenhengjie123/gs-rest-service.git

这个项目是在看其他帖子看到的,是个开源的demo,我在这也引用下。

进入到项目路径:/gs-rest-service/complete,使用**mvn install**命令,把项目中打好的包,放到本地仓库

在 target 目录下,可以看到,生成了一个jar包,如下所示

在 target 目录下,使用命令 java -jar gs-rest-service-0.1.0.jar 启动项目,出现如下所示内容,项目启动成功

记录下这个pid,下来会用到

获取到项目PID后,到 sandbox 目录 ~/sandbox/bin下,使用命令./sandbox.sh -p 53972 -P 12580,运行命令后,出现如下内容,说明成功

也可以通过查看sandbox日志来确定,是否有启动成功,日志如下所示:

参数说明

  • p 被录制应用进程号
  • P repeater启动端口,这个每个人定义的都可以不同,一定是一个未占用的端口

attach 模式下,录制应用名和录制环境这两个参数都会被默认为 unknown。这个应用名与录制环境在standalone作用不大,如果是在repeater-console上就比较重要,用来区分不用应用的流量以及配置使用。

attach关闭

运行命令**./sandbox.sh -p 53972 -S**,出现如下内容,jvm-sandbox关闭成功

jvm-sandbox[default] shutdown finished.

模拟请求

此时我们可以看下repeater的日志,如下:

repeater的日志默认也是在sandbox相同的路径下 ~/logs/sandbox/repeater

同时在~/.sandbox-module/ 目录下也会多出一个 repeater-data 里面也记录下这此录制的内容,只是通过了序列化保存了。

问题

前面说到的 repeater的问题下来会单独来说明这个问题

另外一个就是github的下载经常容易失败,建议大家可以参考上边的链接,做一个加速,在github的链接上增加一个 https://ghproxy.com/ 即可。

jvm-sandbox-repeater环境搭建相关推荐

  1. 【Java全栈学习笔记:第一阶段:JavaSE】:Java入门及环境搭建

    Java全栈课程网站: KuangStudy JavaSE课程地址: 狂神说Java 参考书籍:Java大学实用教程(第四版) 目录 Java入门及环境搭建 Java帝国的诞生 Java发展 Java ...

  2. day01--java基础编程:计算机基础知识 ,java语言概述,java开发环境搭建,eclipse概述,创建简单java项目,JDK JRE JVM的关系,java开发中的命名规范,编程风格

    1 Day01–Java开发环境+HelloWorld 1.1 计算机基础知识 资料下载网址:刘沛霞 18600949004 code.tarena.com.cn tarenacode code_20 ...

  3. SpringBoot+Mybatis+Swagger2环境搭建

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:calebman https://www.jianshu.c ...

  4. CentOS+Nginx+Tomcat+Mysql+PHP 环境搭建及系统部署

    ==============安装centos 7.0======================= 选择最小安装,将相关的"调试工具"."兼容性程序库".&qu ...

  5. Linux学习之CentOS(七)--CentOS下j2ee环境搭建

    因为是做j2ee后台开发的,所以在Linux上搭建j2ee环境是每一个java程序员所需要掌握的.所以这篇随笔主要记录一下j2ee环境搭建过程,包括jdk.tomcat.eclipse的安装,(对于m ...

  6. HBase单机环境搭建

    HBase单机环境搭建 转自:https://songlee24.github.io/2015/07/20/hbase-standalone-mode/ 在搭建HBase单机环境之前,首先你要保证你已 ...

  7. JAVA入门笔记·JAVA名词及环境搭建

    文章目录 一.JAVA主要特征 二.JAVA名词解释 三.环境搭建 一.JAVA主要特征 面向对象 分布式 跨平台 更安全 二.JAVA名词解释 JRE(运行环境) 包括JAVA虚拟机和JAVA程序所 ...

  8. 深度学习(二)theano学习笔记(1)环境搭建

    theano学习笔记(1)环境搭建 原文地址:http://blog.csdn.net/hjimce/article/details/46654229 作者:hjimce 搭建theano实属不易,因 ...

  9. spring源码深度解析—Spring的整体架构和环境搭建

    概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...

  10. 零起步了解RK3288环境搭建以及版本编译

    RK3288环境搭建 物理配置 1.      在获取到source code之后,需要准备起码100G的空间供一个版本完整编译.本地服务器编译8G足以,虚拟机则需要16G ram 2.      u ...

最新文章

  1. Matlab姿态表示
  2. 概率分布,先懂这6个
  3. dockerfile常用命令
  4. OEL上使用yum install oracle-validated 简化主机配置工作
  5. jQuery插件 -- Cookie插件jquery.cookie.js(转)
  6. 为什么我不能关闭垃圾收集器?
  7. SSH远程链接:SCP远程拷贝文件与文件夹
  8. windows进程中的内存结构(转)
  9. [leetcode]211. 添加与搜索单词 - 数据结构设计 ---前缀树解法
  10. Linux开发:error: ‘clockid_t’ has not been declared
  11. office高级应用与python综合案例教程_《office高级应用案例教程.ppt
  12. JAVA架构师之路十:设计模式之组合模式
  13. 10个有效的Linux VPS/服务器性能检测与稳定性测评工具/命令
  14. cookie中__jsl_clearance参数的破解。
  15. 太阳能热水器工作原理
  16. ImGui实现Button高亮
  17. 网络与OSI七层模型
  18. 线上应用故障排查之一:高CPU占用
  19. SSD的使用寿命一般有多久
  20. LogicalDOC含有中文字符的各种报错

热门文章

  1. DM8 DEM介绍及部署
  2. 了解linux 内核版本和发行版本
  3. 观《人造韩寒:一场关于“公民”的闹剧》后感
  4. 牛客NC21477 御坂美琴
  5. f split mysql_mysql split函数多种实现方法
  6. HT7180是内置开关管2.7V-12V输入,最高12.8V10A120W以上输出的高功率异步升压转换器,效率最高可达94%
  7. 处理得怎么样填空词语_二年级语文下册第六单元综合复习题
  8. 翻译的概念和翻译的用途
  9. dede tag标签静态化
  10. 没有mysql服务_为什么我的mysql服务没了?