开发环境最近遇到了"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
参考文章链接:
from:https://blog.csdn.net/u014071875/article/details/103715183