解决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 相关文章推荐
Redis5之后版本的高可用集群搭建的实现
Apr 27 Redis
深入理解redis中multi与pipeline
Jun 02 Redis
了解Redis常见应用场景
Jun 23 Redis
关于redisson缓存序列化几枚大坑说明
Aug 04 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
redis中lua脚本使用教程
Nov 01 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
Redis中key的过期删除策略和内存淘汰机制
Apr 12 Redis
Redis 异步机制
May 15 Redis
Redis keys命令的具体使用
Jun 05 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
PHP系统流量分析的程序
2006/10/09 PHP
PHP调用三种数据库的方法(2)
2006/10/09 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
原生js实现日历效果
2020/03/02 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
Python 实现还原已撤回的微信消息
2019/06/18 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
简单了解django文件下载方式
2020/02/10 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP
MySQL的Query Cache图文详解
2021/07/01 MySQL
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android