解决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 相关文章推荐
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
redis实现共同好友的思路详解
May 26 Redis
深入理解redis中multi与pipeline
Jun 02 Redis
在redisCluster中模糊获取key方式
Jul 09 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
使用redis实现延迟通知功能(Redis过期键通知)
Sep 04 Redis
使用redis生成唯一编号及原理示例详解
Sep 15 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
解决Redis启动警告问题
Feb 24 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
一文教你快速生成MySQL数据库关系图
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
Smarty安装配置方法
2008/04/10 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
php简单防盗链实现方法
2015/07/29 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python中from module import * 的一个坑
2014/07/20 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python字典的常用方法总结
2019/07/31 Python
python中setuptools的作用是什么
2020/06/19 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
药学职务聘任书
2014/03/29 职场文书
房产协议书范本2014
2014/09/30 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
财务部会计岗位职责
2015/02/03 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
CSS实现漂亮的时钟动画效果的实例代码
2021/03/30 HTML / CSS
Redis 常见使用场景
2021/08/30 Redis
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL