解决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主从复制以及主从复制原理
May 29 Redis
redis实现的四种常见限流策略
Jun 18 Redis
解析高可用Redis服务架构分析与搭建方案
Jun 20 Redis
解析Redis Cluster原理
Jun 21 Redis
Redis字典实现、Hash键冲突及渐进式rehash详解
Sep 04 Redis
关于SpringBoot 使用 Redis 分布式锁解决并发问题
Nov 17 Redis
Redis+Lua脚本实现计数器接口防刷功能(升级版)
Feb 12 Redis
Redis之RedisTemplate配置方式(序列和反序列化)
Mar 13 Redis
redis数据一致性的实现示例
Mar 18 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
Redis Lua脚本实现ip限流示例
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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
php5.3 废弃函数小结
2010/05/16 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
js格式化时间的方法
2015/12/18 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python yield 使用浅析
2015/05/28 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
python 公共方法汇总解析
2019/09/16 Python
python输出pdf文档的实例
2020/02/13 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
免税水晶:Duty Free Crystal
2019/05/13 全球购物
优秀班组申报材料
2014/12/25 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
教师继续教育反思周记
2015/06/25 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
基于Python实现射击小游戏的制作
2022/04/06 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL
Mysql中常用的join连接方式
2022/05/11 MySQL
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle