Redis曝新BUG:內存超限后的死循環

jopen 12年前發布 | 9K 次閱讀 Redis NOSQL

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!