社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Redis

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

Py站长 • 7 年前 • 1846 次点击  

今天服务器提示不可用,查了了redis日志发现:

cat /data/redis/redis-server.log
[1316] 17 Jun 13:49:28.032 * 1 changes in 900 seconds. Saving...
[1316] 17 Jun 13:49:28.032 # Can't save in background: fork: Cannot allocate memory
[1316] 17 Jun 13:49:34.059 * 1 changes in 900 seconds. Saving...
[1316] 17 Jun 13:49:34.059 # Can't save in background: fork: Cannot allocate memory
[1316] 17 Jun 13:49:40.069 * 1 changes in 900 seconds. Saving...
[1316] 17 Jun 13:49:40.069 # Can't save in background: fork: Cannot allocate memory
[1316] 17 Jun 13:49:46.098 * 1 changes in 900 seconds. Saving...
[1316] 17 Jun 13:49:46.098 # Can't save in background: fork: Cannot allocate memory
[1316] 17 Jun 13:49:52.026 * 1 changes in 900 seconds. Saving...
[1316] 17 Jun 13:49:52.026 # Can't save in background: fork: Cannot allocate memory

因为Redis默认fork出一个进程来进行持久化到磁盘的工作,以防止主进程假死(大数据量时)。但是当主进程占用内存很大时,fork进程就不一定能够成功,所以出现这个错误。

修改方法:

# vim /etc/sysctl.conf 
vm.overcommit_memory = 1

sysctl -p

Linux内核会根据参数vm.overcommit_memory参数的设置决定是否放行。

overcommit_memory文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

https://stackoverflow.com/questions/11752544/redis-bgsave-failed-because-fork-cannot-allocate-memory

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2755
 
1846 次点击