跳过正文
  1. 博客/
  2. 后端/
  3. 框架/

压测心得

·2 分钟· ·
后端 框架 Java

最近在做一个接口的压测,一开始以为自己优化后的代码应该没得问题,没想到中途遇到不少问题

0x1
#

碰到第一个问题就是,压测前几分钟正常,后几分钟直线下降,且QPS出现诡异的下降,而且响应时间平均4s

根据Cat的监控显示是数据库响应慢,但是DBA说没有慢SQL,这就很尴尬了

怀疑是因为我们用的数据库连接池给定的活跃连接数太少了(20),我们使用是Tomcat默认开启200个线程,假如都在同时请求的话那么会有部分等待

但是尝试加到200,依旧是这个诡异的情况,我们数据库后端使用MyCat分库分表,我这个时候猜想是不是因为MyCat原因

我单元测试将数据库改成我本地的数据库测试,发现QPS很高,不会像压测结果那么诡异,我开始怀疑是不是MyCat网络有问题,进入MyCat宿主机想装一个监控

但是发现宿主机磁盘满了,经过DBA确认是因为MyCat日志打满了导致的,清楚磁盘空间后这个情况就消失了

0x2 QPS抖动
#

我们压测是连续压测15分钟,但是很神奇的是会存在偶发性情况,QPS一直很稳定,突然一抖动直接降为0,然后过了20秒又恢复了

根据Cat监控和Skywalking监控发现,部分长请求会在请求Redis之前卡一下,但是Redis执行很慢,这个时候猜想是因为我们使用Jedis连接池,由于每个请求进来都会查询一下Redis这个导致都得向Jedis连接池申请连接(超时时间1s),但是由于我们Tomcat线程是200,我们给Jedis最大活跃连接数是100,导致有一半都在等,我们尝试把Jedis最大活跃连接数调到200之后这个情况就消失了,QPS一直很稳定

这个猜想后面也是证明是错误的,在最终使用Arthas监控之后发现是日志打印死锁了

具体的思考在这篇博客下面压测卡顿20秒引发的思考

总结
#

这次压测让我知道,业务代码看起来很简单,但是当极限压力下,我们必须清楚各个组件在干什么,这样才能做到不仅仅只是一个CRUD boy

相关文章

Stream源码(1):如何实现去重
·3 分钟
后端 框架 Java Stream
本篇博客是在看代码的时候看到使用Java8使用Stream去重的妙用,从而对Java如何使用Stream实现几行代码 完成一个可支持并行化的流式计算程序
Dubbo浅探
·3 分钟
后端 框架 Java Dubbo
繁忙的一周终于过去了,加入小影第一周主要是熟悉后端架构,同事们都挺好,自己的基础还是有点弱,前段时间简单的把Spring Cloud 和 Dubbo学习了一下,但是其实对于工作来说,之前学的都是最新的版本,但是其实公司用的版本很老了,所以需要时间去学习老版本
Spring Cloud Alibaba浅探
·2 分钟
后端 框架 Java SpringBoot
花了半天时间把Spring Cloud Alibaba 的Nacos 、 Sentinel 和 Seata简单的使用了一下,下面是我的一些看法
SpringCloud浅析
·5 分钟
后端 框架 Java SpringBoot
最近在学SpringCloud,之前一直对用视频学嗤之以鼻,觉得只有弱者才会这样,但是其实对于一些已经非常常见的技术 比如SpringCloud这种,已经出来很长一段时间了,而且其实非常杂,用视频学起来其实非常快,当然前提是你要三倍速播放,而且 你得把视频配套的代码找到,这样你就能很快的掌握这个。
LinkedHashMap实现LRU
·1 分钟
后端 框架 Java
引用 # https://zhuanlan.zhihu.com/p/62322204 https://cloud.tencent.com/developer/article/1519813
FlatMap用法
后端 框架 Java Stream