Can't rewrite append only file in background: fork: Cannot allocate memory
今日长缨在手,何时缚住苍龙。这篇文章主要讲述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命令查看未使用的内存还有很多。这就奇怪了。什么情况啊?
【Can'
t rewrite append only file in background: fork: Cannot allocate memory】有内存不给是不是系统的内存分配设置有问题哪?刚好查看/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已释放刚才使用的内存;
本文出自 “好好生活,快乐工作!” 博客,请务必保留此出处http://yjw1983.blog.51cto.com/265702/1914916
推荐阅读
- OpenDigg安卓开源项目月报201704
- Android开发Diffutils打造不一样的recyclerview
- Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
- 赵雅智_android多线程下载带进度条
- android在myeclipse上创建的项目各种报错
- Android 判断当前语言环境是否是中文环境
- Android webRTC 代码下载编译
- android设计的布局在阿拉伯语下界面错乱的解决方法
- App更新之dialog数字进度条