解决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服务架构分析与搭建方案
Jun 20 Redis
Redis三种集群模式详解
Oct 05 Redis
SpringBoot整合Redis入门之缓存数据的方法
Nov 17 Redis
Redis+Lua脚本实现计数器接口防刷功能(升级版)
Feb 12 Redis
Redis之RedisTemplate配置方式(序列和反序列化)
Mar 13 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
Redis超详细讲解高可用主从复制基础与哨兵模式方案
Apr 07 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 Redis
Redis特殊数据类型Geospatial地理空间
Jun 01 Redis
Redis批量生成数据的实现
Jun 05 Redis
基于redis+lua进行限流的方法
Jul 23 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日期时间函数的高级应用技巧
2009/05/16 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python加载自定义词典实例
2019/12/06 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
Python几种常见算法汇总
2020/06/02 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
性能服装:HYLETE
2018/08/14 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
园林施工员岗位职责
2013/12/11 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
小学生环保倡议书
2014/05/15 职场文书
2015年环卫工作总结
2015/04/28 职场文书
鉴史问廉观后感
2015/06/10 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python