美文网首页
记录一次压测经历

记录一次压测经历

作者: 寒叶xly | 来源:发表于2019-10-27 10:18 被阅读0次

背景:核心服务qps达到了500k+,核心数据大约占有400k+,还有100k左右的非核心数据请求,为做到服务解耦,保证核心服务的稳定性,进行系统拆分,拆分系统包括上线大约耗时1周,拆分完成之后即需要压测,压测流量单机房为总流量的1.5倍,即压测最高的qps达到150k。
压测包含两个接口,第一个是单个id查询getById(Long id),占用流程约为60k,另外一个是批量查询batchGet(List<Long> ids),占用流量约为40k。

技术栈:spring boot,mybatis,redis,mysql.....
单台服务器配置: 8c 16g

客户端请求 -> 查询缓存 ->查询db -> set缓存

过程:
压测单个getById(Long id)接口时,qps达到了60 * 1.5 = 90k,系统 cpu 不足80%,已经达到了压测标准。但是当压测到batchGet(List<Long> ids),list 中 id 数量为 50,压测到 2k 的qps,cpu竟然达到了 80%,但是去查询拆分前的服务 rt_time 不超过 5 ms。由于新服务是我搭建(老服务中的这段逻辑也是我编写的),我自然而然的想到了出问题的点,在拆分出来的新服务中,为了代码简约,batchGet(List<Long> ids)查询数据时直接调用了getById(Long id),那么当批量查询50次,和redis建立了50次的连接,最后修改了batchGet(List<Long> ids)中逻辑,改为mget调用获取缓存中的数据,rt_time的时间降到了5ms以下。但是仍然存在第一个问题,压测时使用新数据ids,rt_time和cpu都是飙升,过片刻时间就恢复了,我怀疑是新数据在缓存中不存在数据,那么就会查询db,然后在一个一个的set到缓存中,优化点当然是将一个一个set改为批量set,使用到了redis提供的技术pipeline,修改完成之后再次压测,不管是rt_time和cpu都有明显的降低。

一点点小小的优化,对性能提升是巨大的,同时感谢压测的小姐姐~

相关文章

  • 记录一次压测经历

    背景:核心服务qps达到了500k+,核心数据大约占有400k+,还有100k左右的非核心数据请求,为做到服务解耦...

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

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

  • linux压测脚本

    需要对linux进行压测,网上找了一些脚本,会报错。因此将好用的脚本整理记录一下。 cpu压测脚本 内存压测脚本

  • 游戏压测记录

    游戏压测注意内容: 1、环境(内网测试) 2、测试方法 先登录跳板机,再登录游戏服务器,上传定制的抓包监控,然后启...

  • Jmeter压测记录

    1、配置压测参数第一步,先启动jmeter,具体如下 配置相关参数 我现在的线程数是50,就是相当于有50个用户,...

  • 压测优化记录

    因即将开始二阶段对外测试,在距离上次对外测试已经有四个月,这中间增加了许多的需求功能,及对基础框架的重构,需要重新...

  • 性能压测学习大纲

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

  • netty线上问题排查

    记一次压测异常排查

  • 压测tips

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

  • 阶梯压测

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

网友评论

      本文标题:记录一次压测经历

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