美文网首页
03_压测问题总结

03_压测问题总结

作者: 王康健_0124 | 来源:发表于2018-11-14 17:15 被阅读0次

在做压测中遇到格式各样的问题,因此总结一下,以备以后可以避免!

1. 压单接口,须要token怎么办?

我们在做接口压测的时候有时候需要token,token呢又是需要登录才能产生,如果我把登录接口也写压测脚本中,在压测时也会大量的请求登录接口,很占用系统资源!

  • 场景:场景中压测的接口并不是做一次就需要一个新的token(每个用户只能进行一次操作,例如:某个赛事的报名),一个用户可以进行多次操作这个接口
  • 解决方法:

① 在线程组中设置一个"仅一次控制器",把获取token的接口放到“仅一次控制器”中,然后在获取token的接口后面添加一个“后置处理器-JSON Extractor”,提取获得的token给下个接口用!


② 在线程组中设置一个“循环控制器”,把需要压测的接口放到“循环控制器”中,设置循环次数,每个线程都只会执行一次登录,然后会按照“循环控制器”中设置的循环次数去执行!

2. 压单接口,每个接口发送都须要一个相对应的token,登录接口又只支持很小的并发,如果关联起来,登录脚本报错压测的接口也报错怎么办?

解决方法:使用jmeter后置处理器中的JSON Extractor和BeanShell PostProcessor
JSON Extractor:提取json报文中的token
BeanShell PostProcessor:把提取的token保存到本地

//log.info("................."+vars.get("tokenid")+"..............");
///log.info:打印变量使用,为了看代码对变量值的修改是否正确
FileWriter fstream=new FileWriter("${datadir}/Token.csv",true);
// ${datadir}是我在测试计划中报错的相对路径变量
BufferedWriter out =new BufferedWriter(fstream);
log.info("................."+vars.get("tokenid")+"..............");
out.write(vars.get("tokenid")+"\n");
out.close();
fstream.close();

然后在用csv文件读取本地的token进行压测

3. 使用非GUI模式执行,上个执行结果忘记删除,导致新执行的日志追加到上一个日志中

当用非GUI模式执行脚本的时候,我们会把jmeter执行的结果保存到日志中,但是往往会忘记把上个执行结果的日志删除,这样就导致了新执行的日志追加到上个日志中!用jmeter查看的日志结果就会不准确!

解决方法:

①.在测试计划中新增一个时间变量名time:变量值:${__time(MM)}-${__time(dd)}_${__time(HH:mm:ss)}
②.保存日志的文件名引用测试计划中的time变量名。

4. 怎么快速的确定cpu80%以上需要多少并发

先进行小批量的并发,例如:200个(看实际情况),然后看一下cpu使用率,大概可以按照 1/当前cpu使用率*200而得到cpu100%时大概需要多少并发(准不准不清楚,目前我是这样弄的),然后再去慢慢调试!

5. 被压接口增加100并发,cpu都会有变法,为什么并发数一直再增加,被压系统cpu未增加也不报错!

这个需要看是否有别的因素限制了性能:

① 关注jmeter服务器的CPU、内存、磁盘、NAT的性能、EIP的性能,有木有达到瓶颈?保证首先性能瓶颈不在发端。
② RDS的cpu:数据库cpu达到瓶颈,会影响被压接口的实例cpu
③ RDS的内存:同上
④ Redis的cpu:同上
⑤ Redis的内存:同上
⑥ 带宽:同上
还有就是你的硬件性能太好啦,100只是毛毛雨看不出什么

6. bug:压测登录接口导致所有接口都很卡

token过多后,redis访问接口使用错误(具体原因忘记了)

7.查看了数据库监控, 数据库CPU满载

解决方法:
① 数据库增加缓存机制:缓存的介质一般是内存,所以读写速度很快。缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
② 增加索引
③ 升级数据库配置

8. 数据库删除压测报名数据后,报名任然提示已报名

原因:redis缓存没有做相应的清空

什么操作最耗费数据库资源?是查询。查询中的子查询、多表查询,条件中的Group by、order by,以及limit等操作都会消耗不少的数据库资源。

  • 提升数据库效率,在资金充足的情况下,我们可以通过提升硬件设施来完成:
    购置多个服务器,每个服务器执行不同的数据操作,查询类操作消耗资源,可以分给好多个数据库来操作,叫做“读写分离技术”。

  • 为了缓解接口(数据库)的压力,对查询的结果做了缓存的策略
    1.执行查询
    2.缓存中存在数据 -> 查询缓存
    3.缓存中不存在数据 -> 查询实时接口

  • redis的主从模式
    redis存储数据是在内存中运行的,运行速度比关系型数据库要快一些。而且它具有SortSet/Hash等具有特色的数据类型
    redis有增删改查四种操作,和一般的数据库差不多。
    添加、修改、删除都叫“数据写入”,主服务器可以作为“写入”服务器,而从服务器可以作为“读取”服务器。主服务器和从服务器要通过一些技术自动来同步。这叫“主从模式”。

  • 创建基于redis的主从模式
    我们也可以给reids构建一个“主从模式”。在多台服务器上安装Redis,然后主服务器负责写入
    操作,从服务器进行读取操作。主从服务器是可以自动备份的:



    (主服务器是master,从服务器是slave)

相关文章

  • 03_压测问题总结

    在做压测中遇到格式各样的问题,因此总结一下,以备以后可以避免! 1. 压单接口,须要token怎么办? 我们在做接...

  • 服务端压测总结篇一:如何完整的做一次压测

    服务端压测系列: 服务端压测总结篇二:压测中的疑惑 压测步骤 一般来说,一次完整的线上压测包括以下7个步骤 1.梳...

  • locust压测RPS无法提高问题解决

    1、压测机器负载过高2、压测脚本配置问题3、被压测机器负载过高4、带宽

  • 第36问:用 mysqlslap 压测的结果,为什么比用 sys

    问题 用 mysqlslap 压测 SQL 的结果,好像比用 sysbench 压测 SQL 的结果更平稳,为什么...

  • 性能压测学习大纲

    一、压测的目的 二、压测的完整流程 三、压测场景分析/组织测试脚本 四、压测数据准备 五、压测指标监控 七、压测结...

  • k8s网络TPS不稳定测试集合

    前提介绍 在工作中配合压测同事对业务压测发现一些问题,使用NodePort做业务暴漏,压测的TPS周期性波动,看了...

  • 压测tips

    压测前: 明确压测的目的,观测指标; 准备好压测方案,几组case,case分别压测多久; 申请压测环境,告知进行...

  • 阶梯压测

    今天我们来浅谈一下阶梯压测,那么,什么是阶梯压测,什么时候做阶梯压测,阶梯压测和普通压测又有什么区别呢?阶梯压测:...

  • 02_压测流程步骤

    做压测的时候,首先我们得知道压测需求!大部分都是有压测指标的,只要能达到指标就算完成任务! 选择压测工具,编写压测...

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

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

网友评论

      本文标题:03_压测问题总结

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