database system_error ai_generated true

无法在后台保存:fork:无法分配内存

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

ID: database/redis-bgsave-fork-error

其他格式: JSON · Markdown 中文 · English
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 设置不当。

generic

官方文档

https://redis.io/docs/latest/operate/oss_and_stack/management/admin/#background-save

解决方案

  1. 调整系统 overcommit_memory 参数:echo 1 > /proc/sys/vm/overcommit_memory,或永久设置:在 /etc/sysctl.conf 中添加 vm.overcommit_memory = 1。
  2. 减少 Redis 内存使用或增加系统交换空间,确保有足够内存供 fork() 使用。

无效尝试

常见但无效的做法:

  1. 70% 失败

    增加 Redis 的 maxmemory 参数,但问题在于系统内存不足,而非 Redis 内存限制。

  2. 80% 失败

    直接重启 Redis 服务,暂时释放内存但系统配置未改,问题会再次出现。