MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk

原创 2018年04月16日 19:15:47

今天运行Redis时发生错误,错误信息如下:

(error) 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日志的详细错误信息。

方法一:

运行

config set stop-writes-on-bgsave-error no 

命令后,关闭配置项stop-writes-on-bgsave-error解决该问题。使用这个命令后,访问报错停止,但是即使没有报错,数据存储也是不成功的。
后来查其他资料发现这样做其实是不好的,这仅仅是让程序忽略了这个异常,使得程序能够继续往下运行,但实际上数据还是会存储到硬盘失败!

方法二:

由于Redis是daemon模式运行的,没法看到详细的日志。所以修改配置文件设置logfile参数为文件(默认是stdout,建议以后安装完毕就修改这个参数为文件,不然会丢掉很多重要信息),重启Redis,查看日志,可以看到类似的错误:

Can’t save in background: fork: Cannot allocate memory

系统不能在后台保存,fork进程失败。

错误原因:
       Redis的数据回写机制分同步和异步两种,

  1. 同步回写即SAVE命令,主进程直接向磁盘回写数据。在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的。
  2. 异步回写即BGSAVE命令,主进程fork后,复制自身并通过这个新的进程回写磁盘,回写结束后新进程自行关闭。由于这样做不需要主进程阻塞,系统不会假死,一般默认会采用这个方法。

redis为了避免主进程假死,需要Fork一份主进程,然后在Fork进程内完成数据保存到硬盘的操作,如果Fork子进程的时候需要额外的内存不够了,那么Fork失败,进而数据保存硬盘也失败了。

解决方案:
修改内核参数vm.overcommit_memory = 1

内核参数overcommit_memory
1. 如果 vm.overcommit_memory = 1,直接放行
2. vm.overcommit_memory = 0:则比较 此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap,决定是否放行。
3. vm.overcommit_memory = 2:则会比较 进程所有已分配的虚拟内存加上此次请求分配的虚拟内存和系统当前的空闲物理内存加上swap,决定是否放行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_37443078/article/details/79964939

解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persi

安装redis后在设置过期时间时,突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently not abl...
  • wuhounuanyangzhao
  • wuhounuanyangzhao
  • 2018年03月23日 16:53
  • 10

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.

晚上10点,同事给我电话,服务器挂掉了,报错如下:   File "build\bdist.win32\egg\redis\client.py", line 361, in execute_comm...
  • chenggong2dm
  • chenggong2dm
  • 2013年12月14日 22:25
  • 9220

redis异常解决:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist

项目中用到redis做缓存服务器,近日出现这个异常: redis.clients.jedis.exceptions.JedisDataException: MISCONF Redis is conf...
  • rchm8519
  • rchm8519
  • 2015年09月11日 10:56
  • 11107

笔记:解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...

今天重启游戏服务器在连接redis数据库时突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently not...
  • qq_31766907
  • qq_31766907
  • 2017年12月05日 09:18
  • 2481

MISCONF Redis is configured to save RDB snapshots

今天在redis中执行setrange name 1 chun 命令时报了如下错误提示:(error) MISCONF Redis is configured to save RDB snapshot...
  • song19890528
  • song19890528
  • 2014年08月13日 15:18
  • 27390

读取redis中的数据时出现:MISCONF Redis is configured to save RDB snapshots

以下为异常详细信息:Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: MISCONF Redi...
  • linfenliang
  • linfenliang
  • 2014年09月18日 16:28
  • 4171

Redis提示(error) MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pe

1.Redis登录进去显示如下错误提示: (error) MISCONF Redis is configured to save RDB snapshots, but it is currently ...
  • lixiaogang_theanswer
  • lixiaogang_theanswer
  • 2017年07月17日 20:04
  • 1303

Redis Error --MISCONF Redis is configured to save RDB snapshots省略

1,MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. C...
  • rockstar541
  • rockstar541
  • 2014年05月09日 17:20
  • 3854

redis 问题解决(MISCONF Redis is configured to save RDB snapshots)

(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on d...
  • lovemianmian
  • lovemianmian
  • 2013年10月20日 14:57
  • 11551

解决redis磁盘满了无法持久化错误not able to persist on disk

解决redis磁盘满了无法持久化错误not able to persist on disk, Caused by: redis.clients.jedis.exceptions.JedisDataEx...
  • li396864285
  • li396864285
  • 2017年06月19日 17:33
  • 1996
收藏助手
不良信息举报
您举报文章:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk
举报原因:
原因补充:

(最多只允许输入30个字)