開發環境最近遇到了"MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"的問題,服務出現了問題,一看日志是Redis在報這個錯誤。
查了查網上的資料,解決方案基本都是修改Redis的配置文件,將
stop-writes-on-bgsave-error yes修改為 stop-writes-on-bgsave-error no
這是一個暫時性的解決方法。看了看stackoverflow上的回答,最高贊回答是這樣的,如下圖:
大概意思是:這是一個快速應急方法,如果你擔心你的數據,那就首先檢查下bgsave方法為什么會失敗。bgsave方法是干什么的呢?咱來看下面這張圖:
bgsave方法為什么會失敗呢?咱們看看大佬的回答
大概意思是(翻譯不到位的地方,還請見諒,英文比較菜):在BGSAVE時,Redis會fork一個子進程,把數據保存到硬盤上。你可以通過查看日志來獲取BGSAVE失敗的原因(Linux系統里Redis日志文件通常是在/var/log/redis/redis-server.log),大多數時候BGSAVE失敗的原因是fork進程分配不到內存。更多時候,fork進程分配不到內存是因為跟操作系統的優化相沖突,即使操作系統有足夠的內存。(下面一大段就不翻譯了,意思是可以Redis官網找到相應的解釋,文末會把相關文章鏈接都綴上)。當然大神也給出了解決方案
Linux系統中,修改/etc/sysctl.conf文件,添加配置:
vm.overcommit_memory=1
執行命令,使其生效
sudo sysctl -p /etc/sysctl.conf