database system_error ai_generated true

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

ID: database/redis-bgsave-fork-error

Also available as: JSON · Markdown · 中文
90%Fix Rate
86%Confidence
1Evidence
2024-01-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Redis 6.2.12 active
Redis 7.0.11 active
Redis 7.2.1 active

Root Cause

Redis 尝试执行 BGSAVE 或 BGREWRITEAOF 时,操作系统 fork() 系统调用失败,因为系统内存不足或 overcommit_memory 设置不当。

generic

中文

Redis 尝试执行 BGSAVE 或 BGREWRITEAOF 时,操作系统 fork() 系统调用失败,因为系统内存不足或 overcommit_memory 设置不当。

Official Documentation

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

Workarounds

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

中文步骤

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

Dead Ends

Common approaches that don't work:

  1. 70% fail

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

  2. 80% fail

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