故障简介

早上查看Redis日志的时候发现Redis一直在报错

[1524] 24 Mar 10:00:56.037 * 1 changes in 900 seconds. Saving...
[1524] 24 Mar 10:00:56.037 # Can't save in background: fork: Cannot allocate memory
复制代码

Redis数据回写机制

数据回写分同步和异步两种方式

  • 同步回写(SAVE), 主进程直接向磁盘回写数据. 在数据量大的情况下会导致系统假死很长时间
  • 异步回写(BGSAVE), 主进程fork后, 复制自身并通过这个新的进程回写磁盘, 回写结束后新进程自行关闭.

由于 BGSAVE 不需要主进程阻塞, 系统也不会假死, 一般会采用 BGSAVE 来实现数据回写.

故障分析

在小内存的进程上做fork, 不需要太多资源. 但当这个进程的内存空间以G为单位时, fork就成为一件很恐怖的操作. 在16G内存的足迹上fork 14G的进程, 系统肯定 Cannot allocate memory. 主机的Redis 改动的越频繁 fork进程也越频繁, 所以一直在 Cannot allocate memory

解决方案

直接修改内核参数 vm.overcommit_memory = 1, Linux内核会根据参数 vm.overcommit_memory 参数的设置决定是否放行。

vm.overcommit_memory = 1,直接放行 vm.overcommit_memory = 0:则比较 此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap,决定是否放行。 vm.overcommit_memory =2:则会比较进程所有已分配的虚拟内存加上此次请求分配的虚拟内存和系统当前的空闲物理内存加上swap,决定是否放行。

/*** 在/etc/sysctl.conf文件里面加入或者直接删除也可以,因为它缺省值就是 */
sudo echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sudo sysctl -p
复制代码

转载于:https://juejin.im/post/5b5e8fad5188251b134e8911

Redis 写磁盘出错 Cannot allocate memory相关推荐

  1. Redis占用大量内存并且报错 Can‘t save in background: fork: Cannot allocate memory

    Redis Can't save in background: fork: Cannot allocate memory 解决 先说如何解决: echo 'vm.overcommit_memory=1 ...

  2. redis可持续化存储的时候出现Can t save in background fork Cannot allocate memory

    解决方案 直接修改内核参数 vm.overcommit_memory = 1, Linux内核会根据参数 vm.overcommit_memory 参数的设置决定是否放行. vm.overcommit ...

  3. Can't save in background: fork: Cannot allocate memory

    今天服务器提示不可用,查了了redis日志发现: cat /data/redis/redis-server.log [1316] 17 Jun 13:49:28.032 * 1 changes in ...

  4. Cannot allocate memory的错误

    今天上午十点,对坐张总突然跟我说:移动端上不去了,让我看看mis反馈群里的消息. 于是看到下面这个问题: 翻译: MISCONF Redis被配置为保存rdbsnapshot,但目前不能在磁盘上保存. ...

  5. mount cifs出现cannot allocate memory解决方法

    今天囧了啊,在ubuntu挂载的文件夹里面解压数据库,结果linux嫌太大挂掉了直接mount error(12): Cannot allocate memory折腾了好久,终于发现解决办法: 方法一 ...

  6. 【kafka】服务器上Kafka启动 Cannot allocate memory

    1.概述 转载:服务器上Kafka启动报错:error='Cannot allocate memory' (errno=12) 解决问题思路:大问题拆小问题.从源头(Kafka有无启动成功)开始测试, ...

  7. 微信小程序 RangeError: WebAssembly.Memory(): could not allocate memory

    问题描述: 最近在使用微信小程序的开发工具时,不管是新项目还是老项目,只要一编译保存就是报错,具体报错内容:RangeError: WebAssembly.Memory(): could not al ...

  8. 服务器上Kafka启动报错:error=‘Cannot allocate memory‘ (errno=12)

    文章目录 环境 经历如下弯路才查看到报错信息 解决方法 1.kill一些不用的进程,来腾出内存. 2.修改默认配置,减少软件启动需要的内存 启动成功 其他 参考 解决问题思路:大问题拆小问题.从源头( ...

  9. Cannot allocate memory问题

    -bash: fork: Cannot allocate memory问题,进程数满了的解决办法 今天一大早来到公司就发现一台远程服务器的进程满了,无法连接上远程服务器,如下图所示: 出现这种情况,主 ...

最新文章

  1. php变量除去_,php方法综述除去换行符(PHP_EOL使用变量)
  2. 何谓CRT,CRT的由来
  3. C# XML添加删除/SelectNodes/xpath
  4. 复制含有随机指针节点的链表~哈希表的使用~(⌒▽⌒)
  5. vue实现部分页面导入底部 vue配置公用头部、底部,可控制显示隐藏
  6. python在什么平台开发_python主要用于开发什么
  7. 课节6: 图神经网络进阶模型之 ERNIESage 上
  8. Lync2010标准版部署
  9. 拓端tecdat|使用R语言进行多项式回归、非线性回归模型曲线拟合
  10. 厄拉多塞筛法求素数 c语言,求质数(Prime Number 素数)的方法——厄拉多塞筛法...
  11. Java Eclipse下载安装教程
  12. com.lowagie.text-2.1.7jar
  13. GZH逸佳君:照片杂色太可怕,谁丑谁尴尬:送你超实用PS降噪插件,1秒变高清
  14. 文字转视频 python_用Python自动生成快闪文字视频
  15. C# 合并Excel工作表
  16. 轻量级私有云存储企业主要功能探析
  17. JDK的可视化工具——Java监视与管理控制台(JConsole)。
  18. [转载]使用 Apache Geronimo 和 JMS 构建事件驱动的框架
  19. 多账号统一登陆,账号模块的系统设计
  20. C 语言(int )和(int*)的区别

热门文章

  1. 在用v-for时又想用v-if进行判断是否生产内容
  2. angular-数据绑定的最佳实践
  3. jQuery实现动态地获取系统时间
  4. 运动检测(前景检测)之(一)ViBe
  5. PAT乙级1006 换个格式输出整数
  6. 字符串匹配:字符串中查找某子串
  7. c语言系统的通用数据结构,(转载)C语言实现通用数据结构的高效设计
  8. 训练自己的数据_PyTorch版CenterNet训练自己的数据集
  9. mate40系统鸿蒙,Mate40领衔更新!鸿蒙系统首批升级机型名单:这些机型可坐等推送...
  10. 【LeetCode】智商题 brainteaser(共3题)