REDIS持久化报错失败

Posted 爱你爱自己

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REDIS持久化报错失败相关的知识,希望对你有一定的参考价值。

redis log报错: [7666] 15 Jan 00:22:36.028 # Error moving temp DB file on the final destination: Invalid cross-device link [1937] 15 Jan 00:22:36.513 # Background saving error [1937] 15 Jan 00:22:36.614 * 1 changes in 900 seconds. Saving... [7679] 15 Jan 00:27:15.659 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect. [7679] 15 Jan 00:27:35.287 * DB loaded from disk: 19.629 seconds 处理方案: 根据提示,在配置文件/etc/sysctl.conf中加入: vm.overcommit_memory=1 重启REDIS即可 关于overcommit_memory说明: 取值为0,系统在为应用进程分配虚拟地址空间时,会判断当前申请的虚拟地址空间大小是否超过剩余内存大小,如果超过,则虚拟地址空间分配失败。因此,也就是如果进程本身占用的虚拟地址空间比较大或者剩余内存比较小时,fork、malloc等调用可能会失败。 取值为1,系统在为应用进程分配虚拟地址空间时,完全不进行限制,这种情况下,避免了fork可能产生的失败,但由于malloc是先分配虚拟地址空间,而后通过异常陷入内核分配真正的物理内存,在内存不足的情况下,这相当于完全屏蔽了应用进程对系统内存状态的感知,即malloc总是能成功,一旦内存不足,会引起系统OOM杀进程,应用程序对于这种后果是无法预测的 取值为2,则是根据系统内存状态确定了虚拟地址空间的上限,由于很多情况下,进程的虚拟地址空间占用远大小其实际占用的物理内存,这样一旦内存使用量上去以后,对于一些动态产生的进程(需要复制父进程地址空间)则很容易创建失败,如果业务过程没有过多的这种动态申请内存或者创建子进程,则影响不大,否则会产生比较大的影响

以上是关于REDIS持久化报错失败的主要内容,如果未能解决你的问题,请参考以下文章

redis高级命令4 持久化机制 事务

Redis事物特点和持久化方式

Redis进阶之事物&持久化

Redis 2种持久化模式的缺陷

redis 持久化之 rdb 快照持久化

Redis 故障排查「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案