听雷 发表于 2022-5-5 10:13
  
感谢分享,学习一下~
新手517842 发表于 2022-5-5 10:21
  
很有参考价值,还想看更多精彩分享,期待楼主下一篇好帖!
好懒 发表于 2023-4-25 11:36
  
感谢分享,学习到了!
redis WARNING overcommit_memory is set to 0 问题解决方法
  

牵网线的 29002人觉得有帮助

{{ttag.title}}


服务器出现redis异常,排查redis日志发现报错日志如下:
  1. 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.
复制代码

刚开始思路是内存不够,清除缓存,清空缓存还是不生效,网上搜索资料才解决此问题
清除缓存的操作如下:
  1. #sync命令可用来强制将内存缓冲区中的数据立即写入磁盘中
  2. sync

  3. #释放网页缓存,目录项和索引
  4. echo 3 > /proc/sys/vm/drop_caches
复制代码

内核参数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. (1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
  2. (2)sysctl vm.overcommit_memory=1
  3. (3)echo 1 > /proc/sys/vm/overcommit_memory
复制代码


打赏鼓励作者,期待更多好文!

打赏
14人已打赏

发表新帖
热门标签
全部标签>
每日一问
2024年技术争霸赛
安装部署配置
技术盲盒
技术笔记
干货满满
产品连连看
2023技术争霸赛专题
每周精选
信服课堂视频
功能体验
秒懂零信任
新版本体验
GIF动图学习
运维工具
技术晨报
自助服务平台操作指引
功能咨询
通用技术
问题分析处理
标准化排查
纪元平台
技术咨询
排障笔记本
华北区交付直播
畅聊IT
专家问答
技术圆桌
测试报告
每日一记
用户认证
原创分享
解决方案
VPN 对接
项目案例
地址转换
存储
技术争霸赛
深信服技术支持平台
卧龙计划
北京区每日一练
答题自测
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
日志审计
流量管理
云计算知识
sangfor周刊
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
终端接入
授权
设备维护
资源访问
虚拟机
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人