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

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

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

 

问题:  Redis配置为持久化保存,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用。请查看Redis日志的详细错误信息。

再查看Redis日志,看到有这样的错误提示“Can’t save in background: fork: Cannot allocate memory”,这个提示很明显"Fork进程时内存不够用了!"

 

经网上查询,Redis在保存数据到硬盘时为了避免主进程假死,需要Fork一份主进程,然后在Fork进程内完成数据保存到硬盘的操作,如果主进程使用了4GB的内存,Fork子进程的时候需要额外的4GB,此时内存就不够了,Fork失败,进而数据保存硬盘也失败了。

具体原因:

1  磁盘不足

2 内存不足

解决方案:

将 stop-writes-on-bgsave-error 设置为 no ,该方法只能忽略错误

在 Redis-cli  客户端执行

redis-cli -h 127.0.0.1 -p 6300

有密码 的话   auth password

 

save 手动备份

SAVE  保存是阻塞主进程,客户端无法连接redis,等SAVE完成后,主进程才开始工作,客户端可以连接

BGSAVE  是fork一个save的子进程,在执行save过程中,不影响主进程,客户端可以正常链接redis,等子进程fork执行save完成后,通知主进程,子进程关闭。很明显BGSAVE方式比较适合线上的维护操作,两种方式的使用一定要了解清楚在谨慎选择。

 

参与评论

游客评论不支持回复他人评论内容,如需回复他人评论内容请