解决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在直播场景的实践方案
Apr 27 Redis
解析Redis Cluster原理
Jun 21 Redis
Redis Cluster集群动态扩容的实现
Jul 15 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
在Centos 8.0中安装Redis服务器的教程详解
Mar 21 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 Redis
muduo TcpServer模块源码分析
Apr 26 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
利用Redis实现点赞功能的示例代码
Jun 28 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
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
javascript 函数使用说明
2010/04/07 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python+pyqt5编写md5生成器
2019/03/18 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
应届生简历中的自我评价
2014/01/13 职场文书
成考报名单位证明范本
2014/01/16 职场文书
恐龙的灭绝教学反思
2014/02/12 职场文书
施工协议书范本
2014/04/22 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
司机岗位职责范本
2015/04/10 职场文书
领导欢送会主持词
2015/07/06 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
python文件与路径操作神器 pathlib
2022/04/01 Python
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技