前言:这是几个月前压测某项目登录接口时遇到的性能问题,虽然大家不一定会遇到,但是分析定位问题的思路还是可以参考一下。

1、压测过程中,tps突然剧烈下降,且所有请求失败(下图绿线)

服务端错误日志,获取不到redis连接池(Could not get a resource from the pool),另外,从下图可以看到,当前jedis版本是2.9.1

获取不到连接,可能是这四种情况:
  Timeout waiting for idle object
  Pool exhausted
  Unable to activate object
  Unable to validate object

下图,表示等待空闲连接超时

2、redis的连接池就是用commons-pool2来管理的,使用jvisualvm打开对应的应用进程,根据上图的提示,找到org.apache.commons.pool2

可以看到相关的配置

活动连接1000,连接满了

dump堆内存进行分析(此时压测已经停止)

根据文章开头的日志信息,搜索org.apache.commons.pool2.impl,然后双击下面的DefaultPooledObject类

进入实例

实例状态是ALLOCATED

ALLOCATED表示在使用中,压测结束后,虽然连接释放了,但是资源没归还

下面可以看到,dataSource为空

如果dataSource为空,就走else,说明只关闭了连接,资源没归还到队列中,后面的线程就获取不到空闲连接

可以看到,实例有很多

为什么会出现这种情况呢?
通过查看源码及官网,可以确定,这是2.9.1的bug,改为2.9.0就没报错了。
官网:https://github.com/xetorthio/jedis/pull/1918/commits/df1bffa3c77f4ede4c912f2c3e78b5c8857725e7

Move dataSource reset before connection returned to pool.

If datasource reset after the connection returned to pool, it might reset the datasource after it was allocated to another thread

意思是:在连接返回到池之前重置移动数据源。
如果数据源在连接返回到池之后重置,那么它可能会在将数据源分配给另一个线程之后重置该数据源

3、出现很多实例状态是ALLOCATED,dataSource为null的原因:

在多线程时,如果dataSource在连接释放后重置(根据代码逻辑可知:连接释放前,资源已经归还,但是未重置),可能在重置前,这个dataSource已经分配给另外一个线程了,此时重置,就把已经获取了这个dataSource的线程的dataSource重置了,这样就导致很多状态是ALLOCATED、dataSource值为null的实例,进而这些线程都只关闭了连接,而没有归还资源,最终导致获取不到连接,即文章开头的异常日志信息,这也印证了都是压测一段时间后才开始报错的现象。

另外,有些性能问题,还是需要一定的代码能力,而且,测试会代码是个趋势。

性能测试tps上不去,又是redis的坑,说多了都是泪啊相关推荐

  1. 性能测试中TPS上不去的几种原因

    压测中TPS上不去的原因: 1.网络带宽 在压力测试中,有时候要模拟大量的用户请求,如果单位时间内传递的数据包过大,超过了带宽的传输能力,那么就会造成网络资源竞争,间接导致服务端接收到的请求数达不到服 ...

  2. 压力测试TPS上不去,但是系统资源又很清闲

    压力测试TPS上不去,但是系统资源又很清闲 背景 项目需要进行阶段性压力测试,所以想模拟真实的正式环境,所以是直接使用域名访问进行压力.整个请求链路大概如下: 现象 就是Jmeter压力测试的结果的T ...

  3. mysql ssd tps 上不去_转【案例分享】压测TPS上不去

    1.问题描述: 客户新上的一个关键业务系统,在做上线前的压力测试时,应用的并发无法达到上线前的并发指标和响应时间指标要求.压测时TPS的曲线很不稳定,如下所示: 2.分析过程: 从上述知识点可以知道: ...

  4. 结合“性能监视器” 排查、处理性能瓶颈导致应用吞吐率等指标上不去的问题...

    双11备战前夕,总绕不过性能压测环节,TPS 一直上不去 / 不达标,除了代码上的问题外,服务器环境.配置.网络.磁盘.CPU 亦是导致性能瓶颈的重要一环,本文旨在分享最近项目性能压测过程中的排查经验 ...

  5. 隐层元素闪一下_太阳一直依靠什么元素在燃烧,地球上的重元素又是怎么来的?...

    本文基于回答网友一个这样的问题:太阳目前氢核聚变是氦碳氧稳定燃烧地球上的铁镍重元素哪里来的? 可以说,这是一个毫无逻辑乱七八糟的问题,但既然邀请回答,就从中挑出几个稍显合理的问题说明一下. 太阳核心每 ...

  6. 推理帝帮你分析:你排位为什么上不去

    多久没写博客了,不知道... 很久了.  一直在混日子,在堕落. 今天心血来潮,呵呵. 上次玩我的世界(minecraft)本来要写几篇的,后面发现自己水爆了,so ...   这篇是在盒子上看到的, ...

  7. 网站收录上不去估计是这几个方面出了问题

    众所周知,网站优化是要长期进行的,一时半会看不出什么效果,但是我们可以从网站的文章收录情况来进行判断网站优化到底进行的怎样了.如果网站文章收录比较多,那么毫无疑问网站优化是比较成功的:如果文章收录率较 ...

  8. 79年后,中国人口将不到10亿,我国的生育率为何上不去了?

    午后明媚和煦的阳光下,你看到一对对是手挽手并且脸上带笑的情侣,但这都是假象,在这背后的现实是中国结婚率在2020年都已经同比下降12.2%了. 我国的结婚率自2013年开始已经下滑,2013-2020 ...

  9. tensorflow gpu利用率为0_训练效率低?GPU利用率上不去?快来看看别人家的tricks吧...

    前言 首先,如果你现在已经很熟悉tf.data+estimator了,可以把文章x掉了╮( ̄▽ ̄"")╭ 但是!如果现在还是在进行session.run(..)的话!尤其是苦恼于G ...

  10. 部分网站为什么上不去_企业网站如何霸占搜索引擎首页

    很多人都知道,企业搭建好官网后需要有流量,有人关注,才能够算得上是搭建官网的意义.不然,搭建官网只能够说做了个动作,毫无意义. 官网要有流量,就需要去做网站推广,网站推广其实也就是在做seo官网优化. ...

最新文章

  1. oracle字段重复新增错误,oracle在已有重复数据的列上创建唯一约束
  2. 教程 | 单级式目标检测方法概述:YOLO与SSD
  3. Informix存储过程
  4. wcf高并发 mysql_使用nginx搭建高可用,高并发的wcf集群
  5. 【机器视觉】 dev_open_dialog算子
  6. 【VScode】使用VScode 来写markdown时序图
  7. LintCode 207. 区间求和 II(线段树)
  8. 除了 Docker,我们还有哪些选择?
  9. java 父类 new 子类
  10. python中属性与方法_python中属性和方法的动态绑定
  11. 东大14春学期《计算机应用基础》在线作业1,东大18春学期《计算机应用基础》在线作业...
  12. python打印四种三角形
  13. MySQL 聚合函数以及 优先级
  14. K3CLOUD新增用户
  15. 58同城赶集网简历怎么下载?【58同城赶集网简历采集,真实手机号联系方式获取】
  16. vc sp5 补丁下载地址
  17. 计算机找不到海信电视,海信电视到底怎么投屏,看这一篇就够了!
  18. chromium 各种版本下载
  19. PS绘制扁平化风格相机镜头UI图标
  20. 认识异或运算的本质与基本规律,0^x=x,x异或x=0,有交换律,结合律,与顺序无关

热门文章

  1. Windows中使用命令创建计划任务(at、schtasks)
  2. 根据一学期的学习,谈谈你对软件工程学科的认识。
  3. html5教程_最好HTML和HTML5教程
  4. 简述 matlab 命令窗的主要作用,matlab复习
  5. 新媒体推广之标题写作的4项原则+6大元素,爆款标题一招就够了! | 黎想
  6. 海康大华摄像头GB/T28181接入国标视频平台如何选择主码流还是子码流
  7. vue网页调用高德获取经纬度
  8. c++语言里平方根值函数,函数式编程之函数定义与使用(以scala语言为例)
  9. 了解uni-app只需这一篇就足够了
  10. word生成html目录树,word将自定义目录做成模板