美文网首页
JVM-SandBox-Repeater 体验部署(1/2)

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

作者: 嗚嗚雲 | 来源:发表于2021-04-29 14:05 被阅读0次

    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

    相关文章

      网友评论

          本文标题:JVM-SandBox-Repeater 体验部署(1/2)

          本文链接:https://www.haomeiwen.com/subject/ipgirltx.html