Valkey 9.2 的无 fork BGSAVE:内存尖峰从 350MB 降到 10MB
来源:dev.to — 2026-10-04
📋 概述
每次在繁忙的 Redis 或 Valkey 实例上观察 BGSAVE,看到的都是同一幕:进程 fork,随后几秒内主机空闲内存像被拔了插头一样往下掉。9 月 16 日上架 Docker Hub 的 Valkey 9.2.0-rc1 提供了一个跳过 fork 的选项,作者决定亲自实测它究竟买到了什么,而不是照抄发行说明。他用同一镜像起两个容器,唯一差别是一个用默认的 fork、一个开启 forkless,各载入 300 万个键(约 1.1GB 数据),再用八个线程猛打 SET、第九个连接每 2 毫秒 PING 一次计时,运行 12 秒并在第 2 秒触发 BGSAVE,每种模式重复七次。结论是内存尖峰几乎消失,但保存明显变慢。
🔑 核心要点
- 对照实验做得非常干净:同镜像双容器,唯一变量是 fork 与 forkless。
- 数据集为 300 万个 300 字节的键,约 1.1GB。
- 负载设计有讲究:八个写线程约每秒 2.7 万次操作,copy-on-write 只在页面被真实写入时才有成本。
- 结果是内存尖峰从 350MB 降到约 10MB,但耗时多出 70%、写入吞吐损失 15%。
- 作者提醒:对空闲数据集做 BGSAVE 几乎说明不了任何问题。
💡 金句
每个我盯着看过的 BGSAVE 都做同一件事:进程 fork,然后几秒钟里主机的空闲内存像被人拔了插头一样往下掉。
👍 0
👎 0
← 返回 dev.to 首页