manager_files 控制 nginx 缓存管理器每轮清理的文件数量,影响 cpu 短时负载;它将大扫除拆为多轮轻量操作,需配合 manager_sleep、keys_zone 等参数协同调优。

manager_files 控制 Nginx 缓存管理器(cache manager)每次扫描并清理缓存时处理的文件数量,直接影响 CPU 短时负载峰值。它不决定“是否清理”,而是调节“怎么清理”——把一次可能耗尽 CPU 的大扫除,拆成多轮轻量操作。
manager_files 的作用机制
当缓存目录中存在大量过期或 inactive 的文件时,Nginx 的 cache manager 进程会周期性(默认每秒触发)启动清理逻辑。它不会一次性遍历全部缓存文件,而是按 每次最多处理 manager_files 个文件 的节奏执行:
- 每轮只读取、检查、删除至多 manager_files 个缓存条目元信息(来自 keys_zone 共享内存)
- 若本轮未删完目标文件,下一轮继续,中间穿插 manager_sleep 毫秒休眠
- 单轮执行若耗时超过 manager_threshold,也会主动中断,避免阻塞事件循环
高并发/海量缓存场景下的典型问题
默认值 manager_files=100 在中小规模缓存(如几千个文件)下足够平稳,但在以下情况易引发 CPU 尖刺:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 缓存目录含数十万级文件(如文档库、日志归档接口),且 daily inactive 清理集中触发
- 磁盘 I/O 较慢(如机械盘或网络存储),单次 stat/open/delete 耗时上升,100 文件就可能超 manager_threshold
- keys_zone 内存不足导致 key 元信息频繁换入换出,加剧 manager 查找开销
调优建议:分阶段降低单次压力
目标是让 cache manager 的每轮工作控制在几毫秒内完成,并留出足够间隙供其他 worker 进程响应请求:
- 对 SSD+百万级缓存:可适度提高至 200~300,配合 manager_sleep=100ms 避免轮询过密
- 对 HDD 或低配 VPS:建议降至 20~50,同时将 manager_sleep 提高到 200ms~500ms,拉长清理周期
- 若观察到 manager_threshold 频繁被触发(日志出现 “cache manager was interrupted due to timeout”),说明单轮任务太重,应优先减小 manager_files,而非增大 threshold
必须同步检查的关联配置
仅调 manager_files 不足以治本,需配套调整:
- 确保 keys_zone 足够大:每个缓存 key 占约 1KB 元数据,若 manager_files 设为 300,但 keys_zone 只有 5m,则大量 key 无法驻留内存,manager 每次都要从磁盘重建索引,反而更耗 CPU
- inactive 值不宜过大且过于集中:比如全站设 inactive=7d,所有缓存都在每周同一时刻面临批量淘汰,加剧 manager 压力;可按资源类型分级(静态资源 24h、API 响应 2h),错峰释放
- max_size 应留余量:若磁盘长期接近 max_size 上限,manager 会高频介入强制清理,此时降低 manager_files 反而延长整体清理时间,宜先扩容或优化缓存命中率










