redis resource_error ai_generated true

错误:BGSAVE 失败,因为 fork 失败:无法分配内存

Error: BGSAVE failed because fork failed: Cannot allocate memory

ID: redis/err-bgsave-failed-disk

其他格式: JSON · Markdown 中文 · English
80%修复率
90%置信度
1证据数
2023-11-20首次发现

版本兼容性

版本状态引入弃用备注
Redis 6.2.8 active
Redis 7.0.13 active
Linux kernel 5.10 active
Linux kernel 6.1 active

根因分析

Redis 服务器尝试 fork 子进程以执行 BGSAVE 失败,原因是系统内存不足,通常是由于内存过提交设置或高内存使用率。

English

The Redis server's attempt to fork a child process for BGSAVE failed due to insufficient system memory, often because of overcommit memory settings or high memory usage.

generic

官方文档

https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/

解决方案

  1. Enable overcommit memory on the Linux host: `echo 1 > /proc/sys/vm/overcommit_memory` and make it persistent in /etc/sysctl.conf with `vm.overcommit_memory = 1`.
  2. Reduce Redis memory usage by setting a lower `maxmemory` value or evicting keys with `maxmemory-policy allkeys-lru`. Restart Redis after changes.
  3. Use a smaller fork-friendly configuration: set `repl-diskless-sync yes` to avoid fork during replication, or switch to AOF with `appendonly yes` and `no-appendfsync-on-rewrite yes`.

无效尝试

常见但无效的做法:

  1. 95% 失败

    The fork failure is at the OS level, not Redis config.

  2. 70% 失败

    Swap can provide a buffer; disabling it may cause immediate OOM kills.