redis报错:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on d

spring连接redis报错:Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: 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.

 

MISCONF Redis被配置为保存RDB快照,但目前无法在磁盘上持久存储。可能修改数据集的命令被禁用。有关错误的详细信息,请查看Redis日志。

是因为强制把redis快照关闭了导致不能持久化的问题,在网上查了一些相关解决方案,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。

set stop-writes-on-bgsave-error no

这样是可以解决问题,但是并没有根本性的解决问题。

我们知道Redis的数据回写(备份rdb快照)分同步和异步两种,

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

stop-writes-on-bgsave-error这个配置默认的是yes,意思是异步创建快照(硬盘上,产生一个新的rdb文件)的时候,出错了,比如磁盘满了,那么就会报错:Redis is configured to save RDB snapshots, but is currently not able to persist on disk. but is currently not able to persist on disk.
redis就会拒绝 新的写入,也就是说,它认为,你当下,持久化数据出现了问题,你就不要再set啦,所以根源的问题是rdb持久化数据的时候出错了。

怀疑是磁盘空间不足或者内存不足导致,登录上机器查询磁盘空间非常充足,总内存125G,redis占了80个G,剩余24G,这么看内存和磁盘空间都是充足的,其实是有问题的,因为在异步回写的时候,是需要fork一个子进程的,fork一个新的进程之后等于复制了当时的一个内存镜像,在小内存的进程上做一个fork,不需要太多资源,但当这个进程的内存空间以G为单位时,fork就成为一件很恐怖的操作。何况是fork 80G内存的进程呢?剩下的24G当然是不够的。

好的,错误原因找到了,再说下解决方案吧:

方案一:

检查一下redis中的数据,是否存在已经不需要的大key占用的内存很大,或者改变一下redis的内存淘汰策略来删除过期的key释放内存

方案二:

直接修改内核参数vm.overcommit_memory = 1

/etc/sysctl.conf 添加vm.overcommit_memory = 1 然后重启

内核参数overcommit_memory 

它是 内存分配策略

可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值