database
system_error
ai_generated
true
无法在后台保存:fork:无法分配内存
Can't save in background: fork: Cannot allocate memory
ID: database/redis-bgsave-fork-error
90%修复率
86%置信度
1证据数
2024-01-15首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Redis 6.2.12 | active | — | — | — |
| Redis 7.0.11 | active | — | — | — |
| Redis 7.2.1 | active | — | — | — |
根因分析
Redis 尝试执行 BGSAVE 或 BGREWRITEAOF 时,操作系统 fork() 系统调用失败,因为系统内存不足或 overcommit_memory 设置不当。
English
Redis 尝试执行 BGSAVE 或 BGREWRITEAOF 时,操作系统 fork() 系统调用失败,因为系统内存不足或 overcommit_memory 设置不当。
官方文档
https://redis.io/docs/latest/operate/oss_and_stack/management/admin/#background-save解决方案
-
调整系统 overcommit_memory 参数:echo 1 > /proc/sys/vm/overcommit_memory,或永久设置:在 /etc/sysctl.conf 中添加 vm.overcommit_memory = 1。
-
减少 Redis 内存使用或增加系统交换空间,确保有足够内存供 fork() 使用。
无效尝试
常见但无效的做法:
-
70% 失败
增加 Redis 的 maxmemory 参数,但问题在于系统内存不足,而非 Redis 内存限制。
-
80% 失败
直接重启 Redis 服务,暂时释放内存但系统配置未改,问题会再次出现。