一次Redis内存飙升的排查

本文记录了一次Redis内存突然飙升并导致服务宕机的排查过程。问题始于Redis内存耗尽,经过排查发现并非数据量过大,而是连接数达到1000上限。进一步分析确定为使用Redis事务时未正确释放连接。解决方案是取消不必要的事务支持,改为使用Lua脚本以确保事务性。这次经验为作者提供了宝贵的故障排查和问题解决经验。
摘要由CSDN通过智能技术生成
一、现象

在该项目中,多个微服务使用一台Redis虚拟机,项目开发完成后,进入试运行阶段,在项目平稳运行五天后,Redis使用的虚拟机内存在某一时刻突然飙升,很短的时间内内存耗尽,Redis虚拟机宕机,所有微服务连接Redis超时无法使用。
异常图片

二、问题排查
  1. 怀疑在某一时刻出现大量写入数据导致内存飙升。我们的业务存到redis的数据量几乎是可以预估的,应该向之前一样平稳,除非对方公司突然增加很多合作方,但是并没有这样的情况。为了确认不是这个原因所导致的,我们查看了Redis的Info,看到Redis使用的峰值也才5Mb左右,所以应该不是这个原因导致的。
  2. Redis连接未释放,导致大量连接耗尽内存。我们设置的连接池最大连接数为1000,根据我们的业务场景几乎是不可能耗尽的。第一次排查时,因为对方公司重启了Redis服务器,所以没法看到宕机时的连接数,但是一直也想不到其他原因。第二次出现该问题时通过Redis Manager看了Redis连接数,果然是连接数达到了1000左右的问题。
三、问题产生根本原因

我们定位到了问题产生原因为连接增加耗尽了内存,接下来我们要从代码中分析是什么原因导致了连接数的持续增加。

  1. 高并发导致,我们的Redis操作都是在线程池管理的线程中进行,线程池最大线程数也就20&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值