Redis Can’t save in background: fork: Cannot allocate memory 解决

先说如何解决:

echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf
sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled

以下是解决过程:

网上大部分这个问题都是通过设置以下参数,使得应用可以向系统申请超量内存使用

vm.overcommit_memory=1

在出现这个问题的时候设置确实是有用的,后续没有再报内存分配失败的错误。
但是我发现日志中redis持久化一次非常慢

162755:M 16 Nov 11:56:22.032 * 10000 changes in 60 seconds. Saving...
162755:M 16 Nov 11:56:22.564 * Background saving started by pid 140259
140259:C 16 Nov 11:57:33.776 * DB saved on disk
140259:C 16 Nov 11:57:34.258 * RDB: 30 MB of memory used by copy-on-write

居然要一分多钟,而且内存占用也相比之前大了很多,并且发现启动日志中有warning:

 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

查看了一下,这个是说明redis最好禁用linux中的一个透明大页的特性,否则会有性能和内存使用上的问题。

Transparent Huge Pages 缩写 THP ,这个是 RHEL 6 开始引入的一个功能,在 Linux6 上透明大页是默认启用的。

由于 Huge pages 很难手动管理,而且通常需要对代码进行重大的更改才能有效的使用,因此 RHEL 6 开始引入了 Transparent Huge Pages ( THP ), THP 是一个抽象层,能够自动创建、管理和使用传统大页。

THP 为系统管理员和开发人员减少了很多使用传统大页的复杂性 , 因为 THP 的目标是改进性能 , 因此其它开发人员 ( 来自社区和红帽 ) 已在各种系统、配置、应用程序和负载中对 THP 进行了测试和优化。这样可让 THP 的默认设置改进大多数系统配置性能。但是 , 不建议对数据库工作负载使用 THP 。

为了确认是不是这个问题影响的,查了一下redis进程占用内存的情况

居然占用了44%的内存

而且内存使用情况应该是设置了vm.overcommit_memory=1使用早就超了限制。

查阅redis官网资料发现THP会造成每次持久化fork调用的延迟和不必要的内存消耗,果断以下命令关闭THP后,重启redis。

echo never > /sys/kernel/mm/transparent_hugepage/enabled

隔天在业务繁忙时段查看redis 发现内存占用不到0.3%,且日志也好看了很多

105009:M 17 Nov 11:10:31.099 * 10000 changes in 60 seconds. Saving...
105009:M 17 Nov 11:10:31.101 * Background saving started by pid 20714
20714:C 17 Nov 11:10:31.702 * DB saved on disk
20714:C 17 Nov 11:10:31.704 * RDB: 2 MB of memory used by copy-on-write

参考资料

Huge pages (标准大页)和 Transparent Huge pages(透明大页)
Redis latency problems troubleshooting


Redis占用大量内存并且报错 Can‘t save in background: fork: Cannot allocate memory相关推荐

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

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

  2. ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】

    ANSYS-CFX,计算时报错,内存参数报错,return code 1[终极解决方案] 在CFX计算时经常会遇到内存不足的错误报告,有的算例网格并不多也会出现这样的问题,本文就最近遇到的内存错误问题 ...

  3. redis集群添加节点报错Either the node already knows other nodes (check with CLUSTER NODES) or contains some k

    [README] redis集群添加节点报错 [ERR] Node 192.168.163.202:6380 is not empty. Either the node already knows o ...

  4. Redis 2.8.18 安装报错 error: jemalloc/jemalloc.h: No s

    2019独角兽企业重金招聘Python工程师标准>>> 本文为大家讲解的是Redis 2.8.18 安装报错 error: jemalloc/jemalloc.h: No such ...

  5. 【学习react中遇到的坑:内存泄漏报错】

    学习react中遇到的坑:内存泄漏报错 对就是这个错误 Can't perform a React state update on an unmounted component. This is a ...

  6. oracle lms进程 内存,【案例】Oracle ges resource消耗内存高报错ORA-04031 MOS解决办法...

    天萃荷净 Oracle研究中心案例分析:运维DBA反映Oracle数据库10.2.0.4.12每间隔一段时间就必须重启,运行一断时间报ORA-04031错误oracle ges res cache l ...

  7. tomcat报错:This is very likely to create a memory leak问题解决

    tomcat报错:This is very likely to create a memory leak问题解决 参考文章: (1)tomcat报错:This is very likely to cr ...

  8. php swoole 内存,swoole 占用内存到10M 报错

    1.问题描述 使用swoole作为服务端对接一个考勤机硬件,使用单进程,从mysql数据库里面读取用户数据,当一次性读取的用户数量大于3000的时候读取就会报错,此时内存占用到10M左右,用户数据为基 ...

  9. Go map[int64]int64 写入 redis 占用多少内存

    我们在系统设计面试或者在实际工作中,免不了要进行一些估算.之前的文章里讲过一些技巧,今天来个实战. 这是我最近在做的一个工作,将内存中的一个超大的 map[int64]int64 写入到 redis, ...

最新文章

  1. 如何精确测量一段代码的执行时间
  2. git 报错:was cached in the local repository, resolution will not be reattempted until the upda
  3. C++类构造函数初始化列表及初始化成员变量的误区
  4. docker -v 文件夹下没有数据_微服务就是Dubbo?并没有那么简单!微服务架构+Docker+k8s了解下...
  5. 做游戏,学编程(C语言) 20 扫雷
  6. js基础知识汇总12
  7. Hibernate中一二级缓存使用详解
  8. python中 是什么运算_“是”运算符在Python中做了什么?
  9. Oracle 相关知识点结构图
  10. 等你等了这么久:DTCC2021中国数据库技术大会 Galaxybase万亿大图实践分享——终于来了!
  11. mysql oracle minus_Oracle Minus关键字
  12. 匈牙利算法(简单易懂)
  13. VR全景图片浏览实现
  14. 中文情感极性词典 NTUSD
  15. 11.03 CSS的基础应用
  16. 【數論】【搜索】【SCOI2009】遊戲
  17. 『類自然數(LZRS)游弋題教室』
  18. Exiting on user cancel解决
  19. JavaIO系统解析
  20. 安卓音乐播放器app开发(一)---功能分析及启动页的制作

热门文章

  1. Sql注入基础原理介绍(超详细)
  2. 怎样修复计算机系统软件,电脑驱动程序损坏怎么快速修复
  3. influx的常规操作
  4. java qq邮箱服务器端口_spring mail借助qq邮箱服务器发送邮件
  5. mysql创建部门表和员工表,并用sql语句进行查询
  6. 德国工业4.0与中国制造2025有哪些差异
  7. 从Angular 转向VUE,再做一次菜鸟
  8. Android网络请求归纳 HttpUrlConnection| Vollety|OKHttp3|Retrofit2
  9. 我的Python学习之路(5)
  10. react-Mobx基本使用