解决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 相关文章推荐
在K8s上部署Redis集群的方法步骤
Apr 27 Redis
为Java项目添加Redis缓存的方法
May 18 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
Redis主从配置和底层实现原理解析(实战记录)
Jun 30 Redis
在redisCluster中模糊获取key方式
Jul 09 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
Redis keys命令的具体使用
Jun 05 Redis
Redis实现订单过期删除的方法步骤
Jun 05 Redis
关于Redis的主从复制及哨兵问题
Jun 16 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正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
Python and、or以及and-or语法总结
2015/04/14 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
利用Python如何生成便签图片详解
2018/07/09 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
举例讲解Python装饰器
2020/12/24 Python
10张动图学会python循环与递归问题
2021/02/06 Python
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
幼儿园健康教育方案
2014/06/14 职场文书
培训班开班主持词
2015/07/02 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers