解决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 相关文章推荐
Redis6.0搭建集群Redis-cluster的方法
May 08 Redis
使用Redis实现秒杀功能的简单方法
May 08 Redis
基于Redis实现分布式锁的方法(lua脚本版)
May 12 Redis
详解Redis瘦身指南
May 26 Redis
redis不能访问本机真实ip地址的解决方案
Jul 07 Redis
Redis Cluster 集群搭建你会吗
Aug 04 Redis
Redis如何实现分布式锁
Aug 23 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis命令处理过程源码解析
Feb 12 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
Redis数据同步之redis shake的实现方法
Apr 21 Redis
如何使用注解方式实现 Redis 分布式锁
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数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
php实现分页工具类分享
2014/01/09 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
php实现图片压缩处理
2020/09/09 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
纯javascript版日历控件
2016/11/24 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
交通事故起诉书
2015/05/19 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang