1. 程式人生 > 其它 >記一次生產事故,Redis記憶體問題排查與解決

記一次生產事故,Redis記憶體問題排查與解決

前幾天生產的Redis突然掛掉了,之前都沒有太注意過Redis那邊的使用情況,這次Redis掛掉重啟後,發現在那臺伺服器上,Redis佔用了足足30G的執行記憶體,這才意識到Redis可能出現了一點問題,然後開始了錯誤排查過程。

錯誤排查

由於Redis是基於記憶體的資料庫,所以當出現執行記憶體過大的情況,首先應該考慮檢查Redis的資料佔用情況。
使用Redis監控工具RedisInsight對記憶體使用情況進行檢查
RedisInsight的基本使用方法見該博文:
Redis 管理工具 RedisInsight

在Memory Analyse模組,填入Redis的RDB檔案目錄,等待片刻後就能在Overview模組看到相關指標資訊。

從圖上可以看到記憶體在Database3的使用達到了28個G,同時由於Redis不支援針對hash的鍵進行過期設定,在業務邏輯中有定時任務會定期執行redis的資料清理。但是可見定期刪除的任務並沒有執行,導致了資料一直在往上增,導致了Redis的記憶體使用越來越大,最後掛掉。

問題解決

重新檢查了一下定時任務,確定了是定時任務沒有正常執行,修改了業務邏輯後,快取正常清理,Redis記憶體使用恢復正常。
正常而言,Redis中的快取都應該設定對應的過期時間及相應的淘汰策略,像這種問題屬於比較低階的日常檢查不到位了。