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 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, 表示内核允许分配超过所有物理内存和交换空间总和的内存

或者修改配置文件,设置最大使用内存,最大使用内存会导致数据被踢出:

maxmemory 1294967296(byte)

所以不建议使用第二个方法

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

时间: 2024-11-08 17:09:19

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 JAVA程序报错信息: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs fo

Can't rewrite append only file in background: fork: Cannot allocate memory

今天发现redis服务日志报了以下的错误: Can't rewrite append only file in background: fork: Cannot allocate memory Starting automatic rewriting of AOF on 138% growth 从日志看是aof持久化时内存不够用了导致.再看了一下maxmemory的值刚好是物理内存的一半.应该是服务redis持久化内存分配原则的,要给fork出的备份进程流出一半内存的富裕.又执行free命令查看

-bash: fork: Cannot allocate memory

linux -bash: fork: Cannot allocate memory 执行命令显示: -bash: fork: Cannot allocate memory 排查发现原因:系统的pid_max不够用了 echo 1493909 > /proc/sys/kernel/pid_max 执行命令后,系统正常

redis写磁盘报错Cannot allocate memory

查看 Redis 日志发现系统在频繁报错: [1821] 10 Nov 09:59:04.086 # Can't save in background: fork: Cannot allocate memory [1821] 10 Nov 09:59:10.002 * 1 changes in 900 seconds. Saving... 在小内存的进程上做一个fork,不需要太多资源,但当这个进程的内存空间以G为单位时,fork就成为一件很恐怖的操作.何况在16G内存的主机上fork 14G内

fork failed.: Cannot allocate memory

在做压力测试时候: [[email protected] ok]# webbench -c 5000 -t30 http://10.100.0.61/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://10.100.0.61/ 5000 clients, running 30 sec. Speed=1

安装composer后报错proc_open(): fork failed - Cannot allocate memory

1.问题描述: 在linux服务器使用composer 安装插件时,出现“proc_open(): fork failed - Cannot allocate memory” 也就是提示“提示内存不足”,我们可以通过创建swap分区解决这个问题. 2.解决方法: 先运行 free -m 看下空间是多少 在命令行环境依次运行以下三条命令 dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 mkswap /var/swap.1 swapon /var/sw

mount CIFS return ERR -12 and report Cannot allocate memory

When I mount CIFS on board, it encountered error as below: # mount -t cifs //192.168.1.28/98share /tmp -o user=name,pass=code CIFS VFS: Send error in SessSetup = -12 mount: mounting //192.168.1.28/98share on /tmp failed: Cannot allocate memory The OS

Failed to allocate memory: 8

Failed to allocate memory: 8This application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for more information. 解决办法直接在新建模拟器的时候把它的内存RAM设置在1024以下就可以,最好设置成512 如图:

virtual memory exhausted: Cannot allocate memory

问题描述: 购买的Linux服务器,Linux服务器的内存为512MB. 在编译PHP的时候会提示:virtual memory exhausted: Cannot allocate memory,编译失败. 解决方法: 发生该问题的原因是服务器的内存不够,从而导致编译失败. 而购买的Linux服务器,未给你分配虚拟内存,所以可以通过自行增加虚拟内存的方法予以解决 [[email protected] ~]# free -m total used free shared buffers cach