[bigdata-045] redis故障处理 "Can't save in background: fork: Cannot allocate memory"
来源:互联网 发布:java已过时需要更新 编辑:程序博客网 时间:2024/05/29 19:23
发现官网出错了。经过检查,发现连接不到redis。检查redis的log,发现错误
Can't save in background: fork: Cannot allocate memory
搜索相关资料,这里说的比较详细
http://www.cnblogs.com/qq78292959/p/3994341.html
http://blog.csdn.net/zqz_zqz/article/details/53384854
1. 故障处理方式概述
这个错误是因为,redis有个默认选项
stop-writes-on-bgsave-error yes
在默认情况下,如果rdb snapshots持久化出现问题,设置这个参数后,redis不允许用户进行任何更新
不彻底的解决方式,将这个选项改为no
stop-writes-on-bgsave-error no
这样只是当redis写硬盘快照出错时,可以让用户继续做更新操作,但是写硬盘仍然是失败的。
彻底解决方式
编辑/etc/sysctl.conf添加
vm.overcommit_memory=1
执行sysctrl -p 使其生效
Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存,将这些不会使用的空闲内存分配给其它程序使用,以提高内存利用率,这种技术叫做Overcommit。一般情况下,当所有程序都不会用到自己申请的所有内存时,系统不会出问题,但是如果程序随着运行,需要的内存越来越大,在自己申请的大小范围内,不断占用更多内存,直到超出物理内存,当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程,哪些占用内存越多,运行时间越短的进程越有可能被杀掉),以便释放内存。
杀掉一些无用进程,以便有更多内存可用。
此外,在/etc/redis/redis.conf下设置,以限制redis的使用内存数量
maxmemory 1024mb
如果使用的内存少,那么做fork的时候就不会出现物理内存不足的问题。
2. 实际解决方式
2.1. 设置
编辑/etc/sysctl.conf添加
vm.overcommit_memory=1
执行sysctrl -p 使其生效
2.2 测试
redis-cli -h 114.5x.23x.xx
set foo bar
auth txxxxxxxok
set foo bar
get foo
2.3. 监控redis.log和官网主页,持续正常,表明ok。
3. 遇到的问题
3.1 如果在redis.conf设置maxmemory 1024mb,redis可以启动,但测试时候set foo bar不能通过,提示错误是
OOM command not allowed
3.2 在redis.conf设置
maxmemory 1024mb
maxmemory-policy volatile-lru
也仍然会在写set foo bar的时候报错。
3.3 需要读文档解决这个问题。估计需要一些细节。
- [bigdata-045] redis故障处理 "Can't save in background: fork: Cannot allocate memory"
- redis 故障处理 "Can't save in background: fork: Cannot allocate memory"
- redis Can’t save in background: fork: Cannot allocate memory
- redis Can’t save in background: fork: Cannot allocate memory
- Can’t save in background: fork: Cannot allocate memory
- 从Redis fork主进程 Can’t save in background: fork: Cannot allocate memory && vm.overcommit_memory
- 解决redis Can't save in background: fork: Cannot allocate memory
- redis 写磁盘出错 Can’t save in background: fork: Cannot allocate memory (转)
- redis日志出现Can't save in background fork Cannot allocate memory
- redis Can’t save in background: fork: Cannot allocate memory 解决及原理
- -bash: fork: Cannot allocate memory 问题的处理
- -bash: fork: Cannot allocate memory 问题的处理
- -bash: fork: Cannot allocate memory 问题的处理
- -bash: fork: Cannot allocate memory 问题的处理
- [Redis] 解决Redis运行时Cannot save in background问题
- 7za 出现 Can't allocate required memory
- Android cannot allocate memory
- mount mount error:cannot allocate memory (12) 处理
- 走迷宫回溯算法
- Mongodb数据迁移步骤
- redis--redis集群
- C++版本百鸡问题1045
- Linux入门:进程调度算法
- [bigdata-045] redis故障处理 "Can't save in background: fork: Cannot allocate memory"
- Python字符串相关操作
- java内存管理小技巧
- 使用MDK5进行DEBUG时出现“cannot access target shutting down debug session”错误的解决方法
- notepad++ 没有plugin manager 看这里 运行java
- javascript对象
- sed note
- Mac安装MySQL,Access denied for user 'root'@'localhost'
- Mac MySQL 5.7.17 密码忘记修改密码