记一次生产事故,Redis内存问题排查与解决

前几天生产的Redis突然挂掉了,之前都没有太注意过Redis那边的使用情况,这次Redis挂掉重启后,发现在那台服务器上,Redis占用了足足30G的运行内存,这才意识到Redis可能出现了一点问题,然后开始了错误排查过程。

错误排查

由于Redis是基于内存的数据库,所以当出现运行内存过大的情况,首先应该考虑检查Redis的数据占用情况。
使用Redis监控工具RedisInsight对内存使用情况进行检查
RedisInsight的基本使用方法见该博文:
Redis 管理工具 RedisInsight

在Memory Analyse模块,填入Redis的RDB文件目录,等待片刻后就能在Overview模块看到相关指标信息。
image
image

从图上可以看到内存在Database3的使用达到了28个G,同时由于Redis不支持针对hash的键进行过期设置,在业务逻辑中有定时任务会定期执行redis的数据清理。但是可见定期删除的任务并没有执行,导致了数据一直在往上增,导致了Redis的内存使用越来越大,最后挂掉。

问题解决

重新检查了一下定时任务,确定了是定时任务没有正常执行,修改了业务逻辑后,缓存正常清理,Redis内存使用恢复正常。
正常而言,Redis中的缓存都应该设置对应的过期时间及相应的淘汰策略,像这种问题属于比较低级的日常检查不到位了。

posted @ 2021-10-13 21:20  cos晓风残月  阅读(252)  评论(0编辑  收藏  举报