一次redis连接池连接数配置过少引起的性能问题

 

 

 

 

 

 

 

背景:一个接口,本身有一定的逻辑,但是不复杂,主要是处理数据,不涉及到数据库操作,但是内部调用两个接口。基本逻辑是先调用BI的一个接口获取到基础数据,在本地处理完数据在根据classid去业务系统查班级,查完的数据在本地处理,返回结果。其中业务系统的接口是老接口,不会存在性能问题,BI的接口是我先压测的,也没性能问题,而本地并无复杂操作,所以接口理论上是不会有性能问题的,但压测的结果却很慢。

压测过程中查看了可以看的地方,没看到异常(其实有,当时没看到),而且涉及到三个系统,没头绪的话查起来会很浪费时间,于是找开发把主要逻辑加上了时间戳。

结果如下,这是grep出时间最长的。

代码如下,主要都是redis的操作,进去看逻辑。

逻辑:

 

不一一看了,这个方法里面主要是对redis的操作,涉及到4个get和4个set,redis的性能是非常好的,之前测试一个4C的服务器,tps轻松上万,单个get或者set只有几毫秒。所以说这里不应该这么慢。看上面的时间都已经几百多毫秒。所以要看下redis的问题,找到redis配置,如下,这是spring boot 对redis连接池的配置,而且开发应该用的默认配置,明显很小,改大之后再测试。

结果如下,时间明显少了很多,服务器CPU也已经上去,tps由一百多到达了四百多。问题确定。

回过头来再看这个问题,可以明显的感觉到做性能测会代码的重要性,很多问题,在代码层很容易定位,至少很容易缩小范围。

再来看看不用代码怎么定位问题。下面这段是我打印的两次线程信息,1.txt是第一次,2.txt是第二次的线程信息,明显看到第一次中waiting有136个线程,而第二个只有61个

查看具体线程信息,明显可以看出来是在等待redis线程池。

再看下这个对比,就更明显了。第二次已经没有等待redis连接池的线程了。

 

转载于:https://www.cnblogs.com/huantianxing/p/8632890.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值