记一次 redis 问题排查:MISCONF Redis is configured to save RDB snapshots, but is currently not able to pe...

问题描述

  • 近期在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的配置是保存数据库快照,但是在执行时不能将数据持久化到磁盘。

解决方法

  • 简单的解决方案:
把 stop-writes-on-bgsave-error 参数设置为:no  
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
  • 通过上述方法,问题得到了解决,然而在没有对redis进行过其他操作的情况下为什么会出现这样的问题呢?然后又去 redis 日志中查找原始的错误信息,发现以下错误:
Can't save in background: fork: Cannot allocate memory
  • Ok,根本原因是 redis fork 过程中不能分配内存。在异步回写时,由于进程内存过大,导致 fork 时内存不足,然后就会报错:Cannot allocate memory。此时,可以通过调整内核参数进行解决:
 vm.overcommit_memory = 1,这个参数在进程请求内存时,不会校验虚拟内存和当前系统物理内存,而直接放行。

你可能感兴趣的:(记一次 redis 问题排查:MISCONF Redis is configured to save RDB snapshots, but is currently not able to pe...)