解决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实现订单自动过期功能的示例代码
May 08 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 Redis
深入理解redis中multi与pipeline
Jun 02 Redis
Redis Cluster集群动态扩容的实现
Jul 15 Redis
Redis如何实现分布式锁
Aug 23 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
Redis高并发防止秒杀超卖实战源码解决方案
Nov 01 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis数据同步之redis shake的实现方法
Apr 21 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
浅谈Redis变慢的原因及排查方法
Jun 21 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php模板函数 正则实现代码
2012/10/15 PHP
深入PHP数据加密详解
2013/06/18 PHP
php 猴子摘桃的算法
2017/06/20 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
javascript的push使用指南
2014/12/05 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python使用KNN算法手写体识别
2018/02/01 Python
python梯度下降算法的实现
2020/02/24 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
手工社团活动方案
2014/02/17 职场文书
《掌声》教学反思
2014/02/23 职场文书
学校食品安全实施方案
2014/06/14 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
2015年暑期见闻
2015/07/14 职场文书
学习党史心得体会2016
2016/01/23 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
Android自定义双向滑动控件
2022/04/19 Java/Android