解决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 12 Redis
在K8s上部署Redis集群的方法步骤
Apr 27 Redis
使用Redis实现秒杀功能的简单方法
May 08 Redis
深入理解redis中multi与pipeline
Jun 02 Redis
Redis 彻底禁用RDB持久化操作
Jul 09 Redis
Redis中一个String类型引发的惨案
Jul 25 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis数据同步之redis shake的实现方法
Apr 21 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 Redis
redis lua限流算法实现示例
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
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
js中关于String对象的replace使用详解
2011/05/24 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
python之信息加密题目详解
2019/06/26 Python
Python内置函数locals和globals对比
2020/04/28 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
绿化先进工作者事迹材料
2014/01/30 职场文书
服务承诺口号
2014/05/22 职场文书
党支部特色活动方案
2014/08/20 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技