解决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高级数据类型Hyperloglog、Bitmap的使用
May 24 Redis
详解Redis瘦身指南
May 26 Redis
5分钟教你docker安装启动redis全教程(全新方式)
May 29 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
Springboot/Springcloud项目集成redis进行存取的过程解析
Dec 04 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
Redis调用Lua脚本及使用场景快速掌握
Mar 16 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
Redis特殊数据类型bitmap位图
Jun 01 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
Redis实现短信验证码登录的示例代码
Jun 14 Redis
Redis+AOP+自定义注解实现限流
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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
JavaScript 函数式编程的原理
2009/10/16 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
js中的 || 与 && 运算符详解
2018/05/24 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
python实现获取Ip归属地等信息
2016/08/27 Python
Python下载网络小说实例代码
2018/02/03 Python
python学习入门细节知识点
2018/03/29 Python
python skimage 连通性区域检测方法
2018/06/21 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
Python 多进程原理及实现
2020/12/21 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
美国购物网站:Clickhere2shop
2021/01/28 全球购物
《春笋》教学反思
2014/04/15 职场文书
庆国庆活动总结
2014/08/28 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
小学运动会加油稿
2015/07/22 职场文书