美文网首页工作生活
流量录制,基于常态化压测

流量录制,基于常态化压测

作者: 上山走18398 | 来源:发表于2020-11-29 12:38 被阅读0次

简介

常态化压测、业务压测、集群压测、全链路压测、等基于特定需求的对后台接口进行的并发式请求,接口自动化
压测数据的来源: 数据仓库,线上流量(可能不包含新的逻辑字段),获取数据的手段多种多样
压测数据的有效性:
压测数据的真实性:
Java Instrument的使用:https://blog.csdn.net/GV7lZB0y87u7C/article/details/79860776
TcpCopy_网易、Gor、diffy基于网络层面的录制 jvm-sandbox-repeater
阿里doom平台
滴滴 RDebug
模拟真实的读库,那写库如何操作?
发压机管理调度尽量无瓶颈

基于流量的自动化接口回归

1. 流量复制
2. 流量回归

读接口
写接口
mock数据,如何保证数据库不被脏数据污染

3. 引流

正式 <=> 测试 <=> 预发

参考链接:
https://www.ctolib.com/topics-128206.html

Java Instrument

简介
可以构建一个独立于应用程序(Agent),用来监测和协助运行在JVM上的程序,甚至能够替换和修改某些类的定义

  1. 启动后的instrument (VM启动)
  2. 本地代码(native code)instrument
  3. 动态改变classpath

java.lang.instrument包的具体实现,依赖于JVMTI(java virtual machine tool interface)类定义动态改变和操作
1. JVMTI 提供了一套”代理”程序机制,可以支持第三方工具程序以代理的方式连接和访问 JVM,并利用 JVMTI 提供的丰富的编程接口,完成很多跟 JVM 相关的功能

  1. 事实上,java.lang.instrument 包的实现,也就是基于这种机制的:在 Instrumentation 的实现当中,存在一个 JVMTI 的代理程序,通过调用 JVMTI 当中 Java 类相关的函数来完成Java 类的动态操作。除开 Instrumentation 功能外,JVMTI 还在虚拟机内存管理,线程控制,方法和变量操作等等方面提供了大量有价值的函数。

参考链接:https://blog.csdn.net/GV7lZB0y87u7C/article/details/79860776
https://www.jianshu.com/p/5c62b71fd882

vm启动前设置Instrument
  1. Instrumentation 的最大作用,就是类定义动态改变和操作。在 Java SE 5 及其后续版本当中,开发者可以在一个普通 Java 程序(带有 main 函数的 Java 类)运行时,通过 -javaagent参数指定一个特定的 jar 文件(包含 Instrumentation 代理)来启动 Instrumentation 的代理程序

关键字:

premain(String agentArgs,Instruments inst) {
  inst.addTransform(new 实现ClassFileformer的类())
  //另外一种方法
ClassDefinition def = new ClassDefinition(....)
inst.redefineClasses(new ClassDefinition[] {def})//可以批量转换很多类
}
ClassFileTransformer - Interface
transform() - ClassFileTransformer中的方法
VM启动后动态Instrument

关键字

Attach API 揭示了agentmain的用法,扩展的API,开发者可以方便的监控一个JVM,运行一个外加的代理程序
两个主要类:
1. VirtualMachine代表一个java虚拟机-JVM枚举、Attach、Detach动作
2. VirtualMachineDescriptor:一个描述虚拟机的容器类

通过attach()方法传入一个jvm的pid(进程id),远程连接到jvm上
通过loadAgent()方法向jvm注册一个代理程序agent,返回Instrumentation实例
该实例可以在class加载前改变class字节码,可以在class加载后重新加载

agentmain(String agentArgs,Instrumentation inst) {
    inst.addTransform(new 实现ClassFileformer的类())
    inst.retransformClasses(...) //批量转换类定义
}
  inst.addTransform(new 实现ClassFileformer的类())




//在main函数开始运行后才启动
public static void agentmain(String agentArgs,Instrumentation inst) 
public static void agentmain(String agentArgs)
Instrument原理
  1. Interface Summary
1. ClassFileTransformer:定义了类加载前的预处理类,可以在这个类中对需要加载的类的字节码做一些处理,比如进行字节码增强;
An agent provides an implementation of this interface in order to transform class files;

2. Instrumentation: 增强器,由JVM在入口参数中传递,提供了如下功能
有几个主要方法
This class provides services needed to instrument Java programming language code
............
...........
  1. Class summary

ClassDefinition: This class serves as a parameter block to the Instrumentation.redefineClasses method
工作原理
  1. Instrument Agent 动态库通过JVM初始化,被动态加载
  2. Instrument Agent初始化的时候,注册了JVMTI的初始化函数eventHandlerVMInit
  3. JVM启动调用了初始化函数eventHandlerVMInit,启动了Instrument Agent,用sun.instrument.instrumentationImpl类里的方法loadClassAndCallPremain去初始化我们自定义的transform里的premain方法
  4. 初始化函数注册了class解析的JVMTI的ClassFileLoadHook
  5. 在解析class的时候,JVM调用JVMTI的ClassFileLoadHook函数,钩子函数调用了sun.instrument.instrumentationImpl的transform方法,通过TransformManager的transform的方法最终调用了我们自定义的MyTransformer的类的transform方法
  6. 因为字节码是在解析class之前改的,通过直接替代修改后字节码的数据流,最后进入class的解析,,。
  7. 重新加载class依然走5~6步

相关文章

  • 流量录制,基于常态化压测

    简介 常态化压测、业务压测、集群压测、全链路压测、等基于特定需求的对后台接口进行的并发式请求,接口自动化压测数据的...

  • Jmeter 压测脚本录制

    1、安装jemter https://jmeter.apache.org/download_jmeter.cgi[...

  • Jmeter基于Docker的分布式压测

    Jmeter基于Docker的分布式压测 Jmeter基于docker分布式压测的测试环境搭建 在本机按照自己的习...

  • 流量录制系统的设计与实现

    无论在全链路压测还是在系统功能测试方面,流量录制回放功能是系统必备功能,也是业界各大公司持续建设的研发效能系统。接...

  • 当接口(系统)碰到性能问题该怎么办

    1.身体检查 做一次压力测试,可以了解系统大致的性能 压测建议: DB:压测有写流量要先建影子表tair:压测有写...

  • Spring 异步实现原理与实战分享

    最近因为全链路压测项目需要对用户自定义线程池 Bean 进行适配工作,我们知道全链路压测的核心思想是对流量压测进行...

  • jmeter(九) 简单压测

    压测策略:不同并发数:10,50,100,200,400 压测结果:并发数:最佳并发用户数、最大并发用户数流量:每...

  • 服务流量限制

    性能测试 写个简单的web服务,再用工具进行压测。 使用wrk 工具进行压测: 常见限流手段 流量限制的手段有很多...

  • 2018-08-30压测

    课堂笔记 性能瓶颈做压测需要准备什么1.压测脚本压测思路是什么由小到大,逐渐添加压力 jmeter可视化执行优点:...

  • 2018-08-30压测

    课堂笔记 性能瓶颈做压测需要准备什么1.压测脚本压测思路是什么由小到大,逐渐添加压力 jmeter可视化执行优点:...

网友评论

    本文标题:流量录制,基于常态化压测

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