com+ system application 启动_[jvmsandboxrepeater 学习笔记][入门使用篇] 1 安装与启动
背景与导读
对jvm-sandbox-repeater做了有一段时间的学习和调研,看到目前repeater相关的文章比较少,所以将自己这段时间了解到的内容整理出来,分享给大家。
学习笔记分成入门使用篇和原理说明篇两个篇章。
入门使用篇主要是基于官方文档和testerhome其他的操作文档,对repeater的使用上的操作细节和配置做了补充说明,建议大家先按照官方的文档使用过了之后,再看这些文档,能够更好地理解文档内容。
原理说明篇则是主要围绕录制流程和回放流程,进行相关的源码分析说明,个人道行尚浅,若分析有错漏,欢迎大家指正补充。
笔记中的每一个篇都有建立在此前篇章的基础上,建议按照顺序阅读。
在这里记录下系列文章地址:
[jvm-sandbox-repeater 学习笔记][入门使用篇] 1 安装与启动(本文)
[jvm-sandbox-repeater 学习笔记][入门使用篇] 2 配置说明
[jvm-sandbox-repeater 学习笔记][入门使用篇] 3 现有接口说明
[jvm-sandbox-repeater 学习笔记][入门使用篇] 4 录制、回放与调试
1.1 环境准备
安装包括repeater安装、repeater-console安装
目前安装和使用,需要mac或者linux系统下进行,如果在windows下进行可能会遇到安装路径出错导致安装失败或者运行失败的情况。
linux/Mac os
jdk 1.8+
maven 3.2+
数据库mysql 5.7+(repeater-console可能用到)
PS:如果只是想简单运行,可以直接使用官方版本,参考官方用户手册,以standalone
模式把玩。
1.2 repeater-console安装与启动
当我们真正进行使用的时候,一般采取非standalone
模式,需要repeater-console结合使用。
PS:repeater与repeater-console之间的协作关系简单来说:repeater负责执行录制任务和回放任务,而repeate-console则是负责将录制记录和回放结果保存,并提供接口给用户触发回放任务。
1.2.1 克隆源码
# 克隆代码到本地git clone https://github.com/alibaba/jvm-sandbox-repeater.git
1.2.2 启动repeater-console
方法有二:
【本地试用强烈推荐】idea右键运行启动:jvm-sandbox-repeater/repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/Application.java
打成jar包运行,项目根目录路径下执行以下命令。
mvn clean install -Dmaven.test.skip=true && java -jar repeater-console/repeater-console-start/target/repeater-console.jar
1.3 repeater安装
安装时必须保证安装用户与被录制应用启动的用户一致。
可以直接执行官方文档中的安装脚本,也可使用本地源码安装。
1.3.1 本地源码安装
克隆源码到本地
# 克隆代码到本地git clone https://github.com/alibaba/jvm-sandbox-repeater.git
修改repeater配置,配置路径:jvm-sandbox-repeater/bin/repeater.properties。如下,主要修改内容为将所有url的主机地址改为127.0.0.1以及本地repeater-console的端口,
repeat.standalone.mode
改为false
。
repeat.standalone.mode
控制repeater是否以standalone模式启动,我们要与repeater-console结合使用,所以配置为false
。其他url都是与repeater-console交互的url,所以需要将host改为本地启动的repeater-console的地址。
# 录制消息投递地址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.standalone.mode=false
到代码的bin文件夹下执行 install-local.sh 脚本。执行完成即可。
# 到代码的bin文件夹下执行 install-local.sh 脚本cd jvm-sandbox-repeater/binsh install-local.sh
1.4 repeater启动与关闭
repeater的启动方法有两种。attach模式和agent模式。
启动repeater之后就会从repeater-console拉取配置,根据配置对请求进行筛选,开始录制。并且可以接收回放请求,随时进行请求。
1.4.1 attach模式启动与关闭
切换至被录制应用启动用户,执行以下启动命令。注意repeater启动端口需要选取一个没有被占用的端口。
attach模式下,录制应用名和录制环境这两个参数都会被默认为unknown
。
# 启动命令~/sandbox/bin/sandbox.sh -p ${被录制应用进程号} -P ${repeater启动端口}# 关闭命令~/sandbox/bin/sandbox.sh -S ${被录制应用进程号}
启动成功/关闭成功的结果:
# 启动成功elesgongdeMac-mini:~ elesgong$ sh ~/sandbox/bin/sandbox.sh -p 6170 -P 8821NAMESPACE : defaultVERSION : 1.2.1MODE : ATTACHSERVER_ADDR : account.jetbrains.comSERVER_PORT : 8821UNSAFE_SUPPORT : ENABLESANDBOX_HOME : /Users/elesgong/sandbox/bin/..SYSTEM_MODULE_LIB : /Users/elesgong/sandbox/bin/../moduleUSER_MODULE_LIB : /Users/elesgong/sandbox/sandbox-module;~/.sandbox-module;SYSTEM_PROVIDER_LIB : /Users/elesgong/sandbox/bin/../providerEVENT_POOL_SUPPORT : DISABLE# 关闭成功elesgongdeMac-mini:~ gongying$ sh ~/sandbox/bin/sandbox.sh -p 6170 -S
jvm-sandbox[default] shutdown finished.
1.4.2 agent模式下启动与关闭
需要重启被录制的应用。在java启动参数中加入对应的参数,如下。
agent模式下的启停都跟随应用,配置好参数后,应用启动则启动,应用停止则停止。
java -javaagent:${HOME}/sandbox/lib/sandbox-agent.jar=server.port=${repeater启动端口}\;server.ip=0.0.0.0 \-Dapp.name=${录制应用名} \-Dapp.env=${录制环境} \-jar application.jar
启动成功检查方法:
应用正常启动,无报错
看日志,日志路径~/logs/sandbox/repeater/repeater.log。
需要关注的日志内容主要是是以下几种:
以
enable plugin
开头的,查看插件挂载情况register event bus success in repeat-register
,说明插件加载完成,模块加载完成,可以开始录制和回放的行为。
PS:其中会夹杂很多以Register bean:name=
的日志,这些日志说明了被repeater记录下来的运行在应用jvm中的实例,会在java回放的时候用到。但是与启动repeater关系不大,在启动阶段可忽略。
2019-10-08 18:44:51 INFO initializing logback success. file=/Users/elesgong/.sandbox-module/cfg/repeater-logback.xml;2019-10-08 18:44:51 INFO module on loaded,id=repeater,version=1.0.0,mode=AGENT2019-10-08 18:44:51 INFO agent launch mode,use Spring Instantiate Advice to register bean.2019-10-08 18:44:51 INFO onActive2019-10-08 18:44:53 INFO pull repeater config success,config=com.alibaba.jvm.sandbox.repeater.plugin.domain.RepeaterConfig@569961222019-10-08 18:44:53 INFO http plugin required servlet-api class router,waiting for class loading2019-10-08 18:44:54 INFO http plugin required servlet-api class router,waiting for class loading2019-10-08 18:44:55 INFO enable plugin mybatis success2019-10-08 18:44:56 INFO add watcher success,type=mybatis,watcherId=10032019-10-08 18:44:56 INFO enable plugin redis success2019-10-08 18:44:56 INFO add watcher success,type=redis,watcherId=10052019-10-08 18:44:57 INFO add watcher success,type=redis,watcherId=10072019-10-08 18:44:57 INFO enable plugin http success2019-10-08 18:44:57 INFO add watcher success,type=http,watcherId=10092019-10-08 18:44:57 INFO enable plugin java-entrance success2019-10-08 18:44:57 INFO watch plugin occurred errorcom.alibaba.jvm.sandbox.repeater.plugin.exception.PluginLifeCycleException: enhance models is empty, plugin type is java-entranceat com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watchIfNecessary(AbstractInvokePluginAdapter.java:122)at com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watch(AbstractInvokePluginAdapter.java:65)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.initialize(RepeaterModule.java:187)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.access$500(RepeaterModule.java:61)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule$1.run(RepeaterModule.java:133)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)2019-10-08 18:44:57 INFO enable plugin java-subInvoke success2019-10-08 18:44:58 INFO add watcher success,type=java,watcherId=10112019-10-08 18:44:58 INFO add watcher success,type=java,watcherId=10132019-10-08 18:44:59 INFO add watcher success,type=java,watcherId=10192019-10-08 18:44:59 INFO add watcher success,type=java,watcherId=10212019-10-08 18:44:59 INFO add watcher success,type=java,watcherId=10232019-10-08 18:44:59 INFO add watcher success,type=java,watcherId=10252019-10-08 18:45:00 INFO add watcher success,type=java,watcherId=10272019-10-08 18:45:00 INFO add watcher success,type=java,watcherId=10292019-10-08 18:45:00 INFO add watcher success,type=java,watcherId=10312019-10-08 18:45:00 INFO add watcher success,type=java,watcherId=10332019-10-08 18:45:00 INFO add watcher success,type=java,watcherId=10352019-10-08 18:45:01 INFO add watcher success,type=java,watcherId=10412019-10-08 18:45:01 INFO register event bus success in repeat-register
出现部分插件加载失败的情况,大多数是由于配置错误,如下错误日志是由于在pluginIdentities
中配置了java-entrance
插件,却在javaEntranceBehaviors
中配置了空数组导致。
错误配置:
{"useTtl": true,"degrade": false,"exceptionThreshold": 1000,"sampleRate": 10000,"pluginsPath": null,"httpEntrancePatterns": ["^/api/city/.*$"],"javaEntranceBehaviors": [],
"javaSubInvokeBehaviors": [{"classPattern": "com.test.commons.util.DateUtils","methodPatterns": ["getNowDateTime","getNowDate"
],"includeSubClasses": false},......],"pluginIdentities": ["http","java-entrance","java-subInvoke","mybatis","redis"],"repeatIdentities": ["http","java"]}
错误日志:
2019-10-08 18:44:57 INFO watch plugin occurred errorcom.alibaba.jvm.sandbox.repeater.plugin.exception.PluginLifeCycleException: enhance models is empty, plugin type is java-entranceat com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watchIfNecessary(AbstractInvokePluginAdapter.java:122)at com.alibaba.jvm.sandbox.repeater.plugin.core.impl.AbstractInvokePluginAdapter.watch(AbstractInvokePluginAdapter.java:65)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.initialize(RepeaterModule.java:187)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule.access$500(RepeaterModule.java:61)at com.alibaba.jvm.sandbox.repeater.module.RepeaterModule$1.run(RepeaterModule.java:133)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)
1.4.3 attach和agent启动模式对比
模式 | 优点 | 不足 |
---|---|---|
attach |
1. 不需要启停应用,即插即用,随时停止 2. 更新配置不需要重启应用 |
1. 进行java回放的时候可能由于无法获取到对应实例而回放失败 2. 如果需要对repeater进行debug,需要将repeater代码嵌入到被录制应用的代码中,不方便debug 3. 不可进行录制应用名和录制环境的配置,会被默认标记为unknown |
agent |
1. 进行java回放的时候能够获取到对应实例能够正常回放 2. 启动应用时开启调试,即可远程调试repeater 3. 支持配置录制应用名以及录制环境,方便在录制记录中进行区分 |
1. 启动/停止都需要重启应用 2. 更新配置也需要重启应用 |
com+ system application 启动_[jvmsandboxrepeater 学习笔记][入门使用篇] 1 安装与启动相关推荐
- Java学习笔记之三:Nexus的安装和启动
一.下载 Download Archives - Repository Manager 3 地址如上 ,里面版本3的历史版本都有,选择最新版本的Windows archive对应的zip下载 如果最新 ...
- C语言学习笔记-入门整合篇(十万字长文)
(该篇学习内容全部来自于C语言中文网, 本篇内容仅仅是简易学习笔记 , 以自己的理解+网站部分描述结合+个人补充,并不适合编程初学者观看!!! 需要有一定的编程基础) 数据在内存中存储 内存条包含了上 ...
- Hadoop学习笔记——入门教程(虚拟机安装LinuxHadoop环境搭建配置)
文章目录 一.Hadoop安装配置文档及注意事项 二.Hadoop概述 2.1.Hadoop是什么 2.2.Hadoop的发展历史 2.3.Hadoop三大发行版本 2.3.1 Apache Hado ...
- 第十一天堂的学习笔记Ubuntu第一篇,分区安装,设置root密码,安装五笔和VMtools
写给以后的自己! 虚拟机版本:WMware workstation 14 Pro 14.1.1 build-7528167 Ubuntu安装包名称:ubuntu-16.04.3-desktop-amd ...
- 嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210)
嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210) 一.SD卡介绍 1. SD卡背景知识和特点 SD卡.MMC卡.MicroSD.TF卡:这些卡其实内部就是Flash存储颗粒,比 ...
- flink1.12.0学习笔记第1篇-部署与入门
flink1.12.0学习笔记第 1 篇-部署与入门 flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇-高级 ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
- flink1.12.0学习笔记第2篇-流批一体API
flink1.12.0学习笔记第 2 篇-流批一体API flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇- ...
- LINUX学习笔记—SAMBA使用篇 smb 文件共享--学习篇
LINUX学习笔记-SAMBA使用篇 smb 文件共享 (转) Linux学习笔记-Samba使用篇 前言:半个月前开始安装.学习redhat LINUX7.0.作为一个Linux新手,不可避免的遇上 ...
- Android学习笔记第五篇--网络连接与云服务(一)
Android学习笔记第五篇–网络连接与云服务 第一章.无线连接设备 除了能够在云端通讯,Android的无线API也允许在同一局域网内的设备通讯,**甚至没有连接网络,而是物理具体相近,也可以相 ...
最新文章
- php错误提示如何查询,php-如何显示我的MySQLi查询错误?
- 移动硬盘插入提示格式化
- 扩容是元素还是数组_348,数据结构1,数组
- Win11如何自动关机 windows11自动关机的设置方法
- php mvc 实现,php mvc的简单实现
- Listary免费版下载与安装
- 使用whistle代理
- USRP X310使用的准备工作--Linux进行FPGA image烧录
- 安全教育平台登录显示服务器繁忙,安全教育平台登录失败是怎么回事 解决方法...
- 旅游类APP-环境搭建
- 安卓开发: Jetpack compose + kotlin 实现 俄罗斯方块游戏
- 算法 图1 列出连通集
- 解决 Win 10 ipv6无网络权限/无Internet连接权限 问题
- CarSim仿真快速入门(三)
- DWD层 (业务数据 二)
- 科学家提激进研究理论:人类世界或为虚拟空间
- 爱尔兰卫生部遭Conti勒索软件攻击说明与建议
- 微信小程序集成jenkins自动打码
- 李笑来,那个一顿饭点8条鲈鱼的人
- 1、项目1-输出点阵图
热门文章
- 测试VGA12H直接写屏速度 V1.1
- 关于回车自动跳转的问题,能不能有选择的跳转??
- Python游戏开发入门3 Pygame屏幕绘制机制
- 20200721每日一句
- 20191026每日一句
- 181218每日一句
- Atitit 信息检索 之音乐检索实践 艾提拉注 目录 1. 常规检索 歌手 歌名	1 1.1. 年代检索	1 1.2. 歌词检索(可以依靠web	1 1.3. 哼唱检索 原曲检索(可以使用酷
- Atitit 提升扩展性bpmn艾提拉总结 工作流 目录 1.1. 尽管BPMN 1.1全面地处理了过程建模符号,但它实质上缺少解决交换格式(用于图交换)的问题	1 1.2. BPMN 2.0中使
- Atitit mybatis缓存遇到的问题与解决 1.1. 只有getobj 没有执行putobject	1 1.2. 默认所有的select要读取缓存怎么办。。执行过滤 可以自己定义个白名单。
- Atitit 编程语言知识点tech tree v2 attilax大总结