PHP程序员站--PHP编程开发平台
 当前位置:主页 >> 数据库 >> NoSQL >> 

Redis 曝新 BUG:内存超限后的死循环

Redis 曝新 BUG:内存超限后的死循环

来源:phperz.com  作者:phper  发布时间:2012-03-10
Redis 曝出了一个新bug,如果你设定了Redis的maxmemory,并且这个Redis有Slave,那么当你的maxmemory限制达到后,就会出现死循环。具体原因和流程如下: Redis 达到了配置中设定的maxmemory限制,开始按LRU策略删除数据 被过期清除的数据会生成DEL 日志推送到Slave 但

Redis曝出了一个新bug,如果你设定了Redis的maxmemory,并且这个Redis有Slave,那么当你的maxmemory限制达到后,就会出现死循环。具体原因和流程如下:

  • Redis 达到了配置中设定的maxmemory限制,开始按LRU策略删除数据
  • 被过期清除的数据会生成DEL 日志推送到Slave
  • 但是如果Slave达到一定数量时,这条DEL日志使用的output buffer空间可能会超过刚刚清除数据空闲出来的空间,这时候会导致空间又超限了
  • 于是整个清除过程就变成了死循环

而且这个问题不仅会出现在Slave的情况下,在写AOF buffer的时候也会发生同样的问题。

Redis作者随后发布了补丁(This fixes issue)对这个问题进行修复。目前此bug的修复已经合并到2.4的主干中,截止目前为止,Redis官方2.4.8稳定版本中已经包含对此问题的修复。

问题地址:issues #327


延伸阅读:
Redis简介
Tags: Redis   bug   内存   死循环  
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号