美文网首页
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_压测问题总结

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