Can't rewrite append only file in background: fork: Cannot allocate memory

今天发现redis服务日志报了以下的错误:

Can‘t rewrite append only file in background: fork: Cannot allocate memory

Starting automatic rewriting of AOF on 138% growth

从日志看是aof持久化时内存不够用了导致。再看了一下maxmemory的值刚好是物理内存的一半。应该是服务redis持久化内存分配原则的,要给fork出的备份进程流出一半内存的富裕。又执行free命令查看未使用的内存还有很多。这就奇怪了。什么情况啊?

有内存不给是不是系统的内存分配设置有问题哪?刚好查看/proc/sys/vm/overcommit_memory 目前设置为0(这是redis优化经常会涉及到的内存设置)

overcommit_memory参数说明:

设置内存分配策略(可选,根据服务器的实际情况进行设置)

/proc/sys/vm/overcommit_memory

可选值:0、1、2。

0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

这样的话,那就把它设置为“1”吧。果然在db目录下temp文件就生成了,重写这个文件开始。

重写过程中内存几乎被全部分配使用;

重写后文件已经变成了数据实际大小(具体参见AOF持久化官方文档);日志显示正常;

而后free查看内存情况,redis已释放刚才使用的内存;

Can't rewrite append only file in background: fork: Cannot allocate memory

时间: 2024-07-31 10:53:47

Can't rewrite append only file in background: fork: Cannot allocate memory的相关文章

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

今天服务器提示不可用,查了了redis日志发现: cat /data/redis/redis-server.log [1316] 17 Jun 13:49:28.032 * 1 changes in 900 seconds. Saving... [1316] 17 Jun 13:49:28.032 # Can't save in background: fork: Cannot allocate memory [1316] 17 Jun 13:49:34.059 * 1 changes in 9

redis : Can't save in background: fork: Cannot allocate memory

redis : Can't save in background: fork: Cannot allocate memory JAVA程序报错信息: 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 fo

Unknown command 'flushall' reading the append only file

为了redis cluster禁用一些危险命令,使用的方法都是在配置文件中增加以下内容: rename-command flushall hufuflushall rename-command flushdb hufuflushdb rename-command keys hufukeys 这就带来了问题,在服务器以外重启后,会造成cluster中redis服务启动不了,而且还会报" Unknown command 'flushall' reading the append only file&

redis 配置文件 append only file(aof)部分---数据持久化

############################## 仅追加方式 ############################### #默认情况下Redis会异步的将数据导出到磁盘上.这种模式对许多应用程序已经足够了,#但是如果断电或者redis进程出问题就会导致一段时间内的更新数据丢失(取决与配置项)##这种只增文件是可选的能够提供更好的体验的数据持久化策略.#举个例子,如果使用默认的配置数据fsync策略,在服务器意外断电的情况下redis只会丢失一秒中内的更新数据,#或者当redis进

redis persistence 之 append only file

1.还是先看看官方文档: 注: AOF 持久化日志向服务器获取每次发生的写操作,这日志在服务器启动的时候执行,以恢复原来的数据集.这些写命令会以redis自身协议的相同格式被日志化.当这个日志文件太大时,redis能够在后台重写这日志.(读操作不记录,操作只需追加文件内容,不允许改写文件.) 如果你愿意,你可以完全不持久化,这种情况通常发生在服务器运行时数据存在就行. 在同一个实例中可以结合使用 AOF 和 RDB.在这种情况下,Redi开启时会重新执行 AOF 文件,以使得恢复原来的数据集(因

redis报错 Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check

redis无法启动,aop文件损坏 运行:   /usr/local/bin/redis-check-aof --fix appendonly.aof 不知道存放路径的可以查找find / -name redis-check-aof 参考来源:https://blog.csdn.net/wang0112233/article/details/86438789 原文地址:https://www.cnblogs.com/weidaijie/p/12122875.html

Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>

服务器异常重启之后,在 启动 redis 时,redis-server不断的从日志文件加载数据到内存,到了6G左右时,redis-server 又挂了,再次启动重复这个过程.查看日志,发现报错: 处理方法:redis-check-aof --fix appendonly_6379.aof 然后启动:redis-server: redis-server /etc/redis-6379.conf & ok,搞定. 原文地址:https://www.cnblogs.com/digdeep/p/1264

redis 设置rdb和aof的备份方式

注意事项 1.bgsave Can't save in background: fork: Cannot allocate memory 2.config set appendonly yes Can't rewrite append only file in background: fork: Cannot allocate memory 原文地址:http://blog.51cto.com/395469372/2153304

Redis数据持久化机制AOF原理分析二

Redis数据持久化机制AOF原理分析二 分类: Redis 2014-01-12 15:36  737人阅读  评论(0)  收藏  举报 redis AOF rewrite 目录(?)[+] 本文所引用的源码全部来自Redis2.8.2版本. Redis AOF数据持久化机制的实现相关代码是redis.c, redis.h, aof.c, bio.c, rio.c, config.c 在阅读本文之前请先阅读Redis数据持久化机制AOF原理分析之配置详解文章,了解AOF相关参数的解析,文章链