记一次jedis版本bug导致的线上异常

线上项目使用了jedis2.10.0客户端来管理和操作redis,上线一段时间后,发现系统hang住,无任何反应,查看了日志、系统负载等,均未发现异常,jstack了线程dump发现了如下异常:

即从commons-pool2(jedis中使用了org.apache.commons.pool2池化技术来做连接池)中获取资源时hang住;至此,找到了系统挂起的直接原因;


作为一线开发人员,想让自己的技术水平进一步的提高,不断地充电和学习是唯一的方式,最近本猿就在充电这两门视频课程,还不错,推荐给大家,共勉ヾ(◍°∇°◍)ノ゙


 

进一步jmap了内存快照,进行了分析,如下,发现最后一次borrow走使用后(距离系统出异常前好几天)未归还(注意,线上项目这里使用了redisTemplate的全部默认配置,包括线程池maxtotal=8, maxwait=-1[无可用连接时无限等待]),表明,连接池中的连接出现泄漏【池化对象的状态一直为allocated,一直不归还】,当新来的连接时,发现已达maxtotal,故无限等待

查阅jedis官网issues,果然发现了一个该case的重大bug, isuess地址:JedisPool exhausted in Jedis 2.10.0 · Issue #1920 · redis/jedis

造成bug的相关原理和代码段如下:

按照官网的建议,升级了jedis的版本到jedis2.10.2,重新进行了压力测试,未再发现异常,至此,问题解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值