查看 Redis 日志
发现系统在频繁报错:

[1821] 10 Nov 09:59:04.086 # Can't save in background: fork: Cannot allocate memory
[1821] 10 Nov 09:59:10.002 * 1 changes in 900 seconds. Saving...

在小内存的进程上做一个fork,不需要太多资源,但当这个进程的内存空间以G为单位时,fork就成为一件很恐怖的操作。何况在16G内存的主机上fork 14G内存的进程呢?肯定会报内存无法分配的。更可气的是,越是改动频繁的主机上fork也越频繁,fork操作本身的代价恐怕也不会比假死好多少。

找到原因之后,直接修改内核参数 vm.overcommit_memory = 1

Linux内核会根据参数vm.overcommit_memory参数的设置决定是否放行。

如果 vm.overcommit_memory = 1,直接放行
vm.overcommit_memory = 0:则比较 此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap,决定是否放行。
vm.overcommit_memory = 2:则会比较 进程所有已分配的虚拟内存加上此次请求分配的虚拟内存和系统当前的空闲物理内存加上swap,决定是否放行。

linux设置vm.overcommit_memory 方法
永久性修改内核参数

/etc/sysctl.conf文件里面加入或者直接删除也可以,因为它缺省值就是0

vm.overcommit_memory = 0

运行使之生效

#sysctl -p

(转自:https://segmentfault.com/a/1190000000767465

redis写磁盘报错Cannot allocate memory的更多相关文章

  1. jmeter Linux环境执行总报错 cannot allocate memory

    1.windows环境写好的测试用例,执行没有问题,在Linux环境跑总是报错,提示如下 cannot allocate memory 2.一开始以为是哪块设置有问题,因为脚本里边有设置邮件自动发送, ...

  2. mysql启动报错cannot allocate memory for the buffer pool处理

    今天启动mysql服务器时失败了.去/var/log/mysql/查看error.log,报错信息如下: 160123 22:29:26 InnoDB: Initializing buffer poo ...

  3. kafka启动报错Cannot allocate memory;There is insufficient memory for the Java Runtime Environment to continue.

    kafka启动过程报错,配置没有问题,这就懵了!! Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000 ...

  4. kafka 启动 报错cannot allocate memory,即内存不足

    错误提示: Java Hotspot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 9865134 ...

  5. tomcat 启动报错 Cannot allocate memory

    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=256m; support was removed in 8.0 ...

  6. redis集群报错

    写入redis集群报错:(error) MOVED 6918 解决方法:redis-cli -c -p 7001 -h 10.0.0.104

  7. linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析

    从Out of memory来看是内存超出了,后面的 Kill process[PID] [process name] score好像和进程有关了,下面我们就一起来看看linux 终端报错 Out o ...

  8. laravel5.7的redis配置,一直报错Class 'Predis\Client' not found

    laravel5.7的redis配置,一直报错Class 'Predis\Client' not found 首先我检查了配置,和composer 都没有错,用原生的redis也可以正常连接和读写. ...

  9. php操作redis出现不报错就退出

    金乐园项目 php操作redis出现不报错就退出  死活找不出原因是因为下面这句话导致:     原因igbinary扩展没有装上 $options[\Redis::OPT_SERIALIZER] = ...

随机推荐

  1. C++调用Matlab引擎 图像读写与处理 (知识+代码篇)

    准备知识 之 Matlab Engine 执行命令 /* Execute matlab statement */ int engEvalString(Engine* ep, const char* s ...

  2. android中与Adapter相关的控件----ExpandableListView

    ExpandableListView(可折叠的列表) 一.ExpandableListView(可折叠的列表)和ListView有很多地方差不多的,使用也差不多,只是他们使用适配器不一样的,Expan ...

  3. 00.mp4v2工具的用法

    1.交叉编译mp4v2库# ./configure --prefix=/usr/local/mp4v2-2.0.0 --host=arm-hisiv300-linux  CC=arm-hisiv300 ...

  4. json.net(Json.NET - Newtonsoft)利用动态类解析json字符串

    将对象转换为字符串很简单,唯一要注意的点就是为了避免循环要在需要的字段上添加jsonignore属性.可以参照这篇博文:http://www.mamicode.com/info-detail-1456 ...

  5. 洛谷——P1130 红牌

    题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括N个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都派了 ...

  6. 渗透测试集成环境Faraday

    渗透测试集成环境Faraday   Kali Linux集成了海量的渗透测试工具.但是这些工具在使用的时候,还是分离的.虽然用户可以通过Shell.日志/报告导入导出功能等方式,进行整合,但是仍然不便 ...

  7. Java中final和static关键字总结

    1.final: final关键字可用于类.方法.变量前. final修饰的类不可被继承,例如java.lang.Math就是一个 final类,不可被继承. final修饰变量,在显示初始化后不可改 ...

  8. python局部变量与全局变量

    name = "head first python"def what_happens_here():    print(name)  1    name = "pytho ...

  9. mac 安装 word2016并破解

    http://blog.csdn.net/zqbx7/article/details/53448280

  10. MyBatis-Invalid bound statement (not found)-问题处理

    最近把工程改为Hibernate和MyBatis并存,并存只要注意两点即可: 1.使用同一个dataSource 2.事物交给Hibernate进行管理(Hibernate4+)  Hibernate ...