解决linux下redis数据库overcommit_memory问题


Posted in Redis onFebruary 24, 2022

背景

公司的redis有时background save db不成功,通过log发现下面的告警,很可能由它引起的:

[13223] 17 Mar 13:18:02.207 # 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.

于是通过搜索,也有人跟我遇到同样的问题,基本可以确定是由它引起的。

内核参数overcommit_memory 

它是 内存分配策略

可选值:0、1、2。

  • 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
  • 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
  • 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

什么是Overcommit和OOM

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。

当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

解决方法:

很简单,按提示的操作(将vm.overcommit_memory 设为1)即可:

有三种方式修改内核参数,但要有root权限:

  • (1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
  • (2)sysctl vm.overcommit_memory=1
  • (3)echo 1 > /proc/sys/vm/overcommit_memory

到此这篇关于解决linux下redis数据库overcommit_memory问题的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Redis 相关文章推荐
详解Redis复制原理
Jun 04 Redis
解析Redis Cluster原理
Jun 21 Redis
Redis 常见使用场景
Aug 30 Redis
使用redis实现延迟通知功能(Redis过期键通知)
Sep 04 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
Redis的字符串是如何实现的
Oct 24 Redis
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
Mar 16 Redis
使用Redis实现点赞取消点赞的详细代码
Mar 20 Redis
redis数据结构之压缩列表
Mar 21 Redis
在Centos 8.0中安装Redis服务器的教程详解
Mar 21 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 Redis
解决Redis启动警告问题
分布式Redis Cluster集群搭建与Redis基本用法
Redis命令处理过程源码解析
Redis+Lua脚本实现计数器接口防刷功能(升级版)
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 #Redis
聊聊redis-dump工具安装问题
Jan 18 #Redis
You might like
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php计算两个文件相对路径的方法
2015/03/14 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
python中的测试框架
2020/11/13 Python
2014年3.15团委活动总结
2014/03/16 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
学校施工安全责任书
2015/01/29 职场文书
公司开除员工通知
2015/04/22 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
基层工作经历证明
2015/06/19 职场文书
朋友离别感言
2015/08/04 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB