MISCONF Redis is configured to save RDB snapshots...

目录

Redis问题

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error. Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。


原因

强制关闭Redis快照导致不能持久化。


解决方案

redis有个默认选项 stop-writes-on-bgsave-error yes

在默认情况下,如果rdb snapshots持久化出现问题,设置这个参数后,redis不允许用户进行任何更新

临时解决方案,服务重启后该配置失效,需要重新再配置一遍

将stop-writes-on-bgsave-error设置为no

127.0.0.1:6379> config set stop-writes-on-bgsave-error no

彻底解决方式

  1. 编辑/etc/sysctl.conf添加 vm.overcommit_memory=1
  2. 执行sysctl -p 使其生效

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存,将这些不会使用的空闲内存分配给其它程序使用,以提高内存利用率,这种技术叫做Overcommit。一般情况下,当所有程序都不会用到自己申请的所有内存时,系统不会出问题,但是如果程序随着运行,需要的内存越来越大,在自己申请的大小范围内,不断占用更多内存,直到超出物理内存,当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程,哪些占用内存越多,运行时间越短的进程越有可能被杀掉),以便释放内存。 杀掉一些无用进程,以便有更多内存可用。

此外,在/etc/redis/redis.conf下设置,以限制redis的使用内存数量 maxmemory 268435456 (maxmemory是bytes字节类型,注意转换)

如果使用的内存少,那么做fork的时候就不会出现物理内存不足的问题。