JVM-SandBox-Repeater 体验部署(1/2)

JVM-SandBox-Repeater 初体验 环境搭建

环境信息

操作系统:Mac OS 、Linux(相同)

下载源码

JVM-SandBox 结构参考:(安装后的结构)

Linux:/home/用户名/
Mac:/Uaers/用户名/

├── logs
│   └── sandbox
│       ├── repeater
│       │   ├── repeater.log
│       ├── sandbox-mgr.log
│       ├── sandbox.log
├── .sandbox-module
│   ├── cfg
│   ├── plugins
│   ├── repeater-bootstrap.jar
│   └── repeater-module.jar
├── .sandbox.token
├── sandbox
│   ├── bin
│   ├── cfg
│   ├── example
│   ├── install-local.sh
│   ├── lib
│   ├── module
│   ├── provider
│   └── sandbox-module

JVM-SandBox-Repeater 工程结构参考:(源码)

jvm-sandbox-repeater git:(master) ✗ tree -L 2
.
├── LICENSE
├── Readme.md
├── bin
│   ├── bootstrap.sh 
│   ├── health.sh 
│   ├── install-local.sh # 本地的启动脚本 
│   ├── install-repeater.sh
│   ├── package.sh  # 本地的编译脚本 ,负责编译并把编译好的包copy到.sandbox-module下面去
│   ├── repeater-config.json  # 默认的配置文件
│   ├── repeater-logback.xml #日志配置
│   └── repeater.properties  # 配置文件 配置录制投递、回放地址、配置文件获取等信息
├── docs # 文档使用
│   ├── plugin-development.md
│   ├── slogan-demo.md
│   └── user-guide-cn.md
├── hessian-lite # 针对hessian 进行的修改,这个地方使用的时候可以针对自己的业务进行修改
│   ├── hessian-lite.iml
│   ├── pom.xml
│   └── src
├── pom.xml
├── repeater-aide # 这是diff 相关的东西
│   ├── pom.xml  
│   └── src
├── repeater-client # 这里放了spring容器相关的操作
│   ├── pom.xml
│   └── src
├── repeater-console # 这是一个web服务,主要是用于录制数据的接收、存储,提供配置页面服务
│   ├── Readme.md
│   ├── pom.xml
│   ├── repeater-console-common # 这是console的 工具包
│   ├── repeater-console-dal # 这是JPA的Dao层
│   ├── repeater-console-service #  主要是JPA的相关操作
│   ├── repeater-console-start # 这是console的controller
├── repeater-module # 这里就比较有意思了,是加载配置信息的,属于自定义的东西
│   ├── pom.xml
│   └── src
├── repeater-plugin-api  # 这是插件api,主要是一些Bean对象的定义
│   ├── pom.xml
│   └── src
├── repeater-plugin-core # 这是核心,录制、回放、Mock、序列化等相关的实现都是这里
│   ├── pom.xml
│   └── src
├── repeater-plugins # 这是官方提供的插件,但是用的时候需要自己改改
│   ├── dubbo-plugin
│   ├── hibernate-plugin
│   ├── http-plugin
│   ├── ibatis-plugin
│   ├── java-plugin
│   ├── mybatis-plugin
│   ├── redis-plugin
│   ├── repeater-plugins.iml
│   ├── socketio-plugin
│   └── spring-data-jpa-plugin
│   ├── pom.xml
└── travis.sh

源码下载下来后,可以执行源码目录下 /bin中的install-local.sh编译并把编译好的包copy到.sandbox-module下面去

1、jvm-sandbox-console 调整配置 并 启动

1、console源码调整:

console代码在idea中启动时,不会报错,但是使用jar包启动时,页面会报异常,需要做如下调整。

- 位置 repeater-console/repeater-console-start/src/main/resources/velocity 
全局替换 #parse("/blocks  为  #parse("blocks 
解决资源文件引用找不到报错,这个替换有多处,都替换了就可以了

- 位置 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/page/ReplayController.java 
替换 return "/replay/detail"; 为 return "replay/detail"; 
解决跳转页面的问题

- 位置 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/test/RegressPageController.java 
替换 return "/regress/index"; 为 return "regress/index";
解决跳转页面的问题

2、 数据库配置

位置:/repeater/repeater-console/repeater-console-start/src/main/resources

spring.datasource.url=jdbc:mysql://数据库IP/域名:数据库端口/数据库名?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=用户名
spring.datasource.password=密码

3、编译脚本

位置:repeater/bin/package.sh
如果你的maven没有设置环境变量,那么这里可以修改一下直接指定

# maven package the sandbox
/maven/apache-maven-3.5.3/bin/mvn clean package -Dmaven.test.skip=true -f ../pom.xml || exit_on_err 1 "package repeater failed."

4、配置文件修改

位置:repeater/bin/repeater.properties
如果你是本机器则配置成127.0.0.1或lcoalhost,如果是远程主机部署,则配置成服务IP端口

# 录制消息投递地址
broadcaster.record.url=http://127.0.0.1:8001/facade/api/record/save

# 回放结果投递地址
broadcaster.repeat.url=http://127.0.0.1:8001/facade/api/repeat/save

# 回放消息取数据地址
repeat.record.url=http://127.0.0.1:8001/facade/api/record/%s/%s

# 配置文件拉取地址
repeat.config.url=http://127.0.0.1:8001/facade/api/config/%s/%s

# 心跳上报配置
repeat.heartbeat.url=http://127.0.0.1:8001/module/report.json

# 是否开启脱机工作模式
repeat.standalone.mode=false

# 是否开启spring advice拦截
repeat.spring.advice.switch=false

5、环境变量

启动参数中的 -Dapp.name=repeater -Dapp.env=daily 
对应应用名和环境,是需要启动时添加的,不然jvm-sandbox启动后找不到对应的环境信息

代码一下位置读取了这个环境变量信息
com.alibaba.jvm.sandbox.repeater.plugin.core.util.PropertyUtil
getSystemPropertyOrDefault

通过读代码我理解这个东西应该是通过在被测的jvm机器上设置环境变量来搞

6、编译启动

执行 bin/install-local.sh 编译并copy代码后

说明:
    jvm-sandbox-repeater的web工程repeater-console被改名为repeater-bootstrap.jar

    修改来自package.sh脚本
    ../repeater-console/repeater-console-start/target/repeater-console.jar ${REPEATER_TARGET_DIR}/repeater-bootstrap.jar \

正常启动:
     java -jar -Dapp.name=repeater -Dapp.env=daily repeater-bootstrap.jar

调试启动:
    java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -javaagent:${HOME}/sandbox/lib/sandbox-agent.jar=server.port=8820\;server.ip=0.0.0.0 -Dapp.name=repeater -Dapp.env=daily -jar ${HOME}/.sandbox-module/repeater-bootstrap.jar

访问地址:
http://127.0.0.1:8001/config/list.htm

image.png

2、下载 并 解压 jvm-sandbox

# 下载最新版本的 jvm-sandbox
wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip

# 解压
unzip sandbox-stable-bin.zip

启动被测 jvm 应用

调试启动被测试应用

nohup "$JAVACMD" $JAVA_OPTS \
  $OPTS_MEMORY \
  -classpath "$CLASSPATH" \
  -Dbasedir="$BASEDIR" \
  -Dfile.encoding="UTF-8" \
  -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9173 \
   app_xxx.jar \
  "$@" >${LogPath}app_xxx.log 2>&1 &

jvm-sandbox agent 启动模式

nohup "$JAVACMD" $JAVA_OPTS \
  $OPTS_MEMORY \
  -classpath "$CLASSPATH" \
  -Dbasedir="$BASEDIR" \
  -Dfile.encoding="UTF-8" \
  -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9173 \
  -Dapp.name=RouteVrs -Dapp.env=testA -javaagent:/home/admin/sandbox/lib/sandbox-agent.jar=server.port={jvm-sandbox控制端口}\;server.ip={当前主机IP} \
   app_xxx.jar \
  "$@" >${LogPath}app_xxx.log 2>&1 &

在被测jvm应用启动中添加agent配置,用于和console通讯使用
  -Dapp.name=RouteVrs -Dapp.env=testA -javaagent:/home/admin/sandbox/lib/sandbox-agent.jar=server.port={jvm-sandbox控制端口}\;server.ip={当前主机IP} \

jvm-sandbox attach 启动模式

# 进入沙箱执行脚本 attach方式进入被测jvm
cd sandbox/bin

# 目标JVM进程33342
./sandbox.sh -p 33342 -P 55756

挂载成功后会提示
./sandbox.sh -p 33342
           NAMESPACE : default
             VERSION : 1.2.0
                MODE : ATTACH
         SERVER_ADDR : 0.0.0.0
         SERVER_PORT : 55756
      UNSAFE_SUPPORT : ENABLE
        SANDBOX_HOME : /Users/vlinux/opt/sandbox
   SYSTEM_MODULE_LIB : /Users/vlinux/opt/sandbox/module
     USER_MODULE_LIB : ~/.sandbox-module;
 SYSTEM_PROVIDER_LIB : /Users/vlinux/opt/sandbox/provider
  EVENT_POOL_SUPPORT : DISABLE

卸载沙箱
./sandbox.sh -p 33342 -S
jvm-sandbox[default] shutdown finished.

3、远程调试

新建远程Remote JVM Debug 填入IP及端口


image

对比 attach 和 agent 启动模式的优缺点

  • attach 模式

优点

  1. 可插拔,随时加载或卸载
  2. 更新插件或配置时,不需要重启应用
  3. 调试方便,可同时远程调试repeater以及被测应用,因为可以起两个remote debug 端口
  4. 适合临时使用

缺点

  1. 部分场景回放会失败,如Java回放时无法获取实例,会出现反射实例对象失败,不能进行回放
  2. 不能缓存Java实例,需要被测应用加载钩子才可以使用。
  • agent 模式

优点

  1. 回放流畅,基本 java 录制都可以回放
  2. 适合长期使用,随应用部署

缺点

  1. 更新插件,需要重启应用
  2. 不适合同时调试repeater以及被测应用

接下来就是 JVM-SandBox-Repeater 录制、回放、Mock

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容