manager_sleep 控制缓存管理进程淘汰后休眠时长,非定时检查间隔;默认200ms,需据I/O压力、缓存更新频率与max_size等协同调整,过短增CPU开销,过长致空间释放滞后。

manager_sleep 控制的是 Nginx 缓存管理进程(cache manager)每次执行完一轮淘汰操作后,主动休眠的时间。它不决定“多久检查一次”,而是决定“淘汰完一批后歇多久再继续”。调得过短会增加 CPU 轮询开销;调得太长则可能让过期缓存滞留更久,影响磁盘空间释放效率。
manager_sleep 的作用机制
- cache manager 进程只在有缓存需要清理时才被唤醒(比如
inactive时间已到、max_size即将超限) - 它不是定时器,而是事件驱动:扫描共享内存中的 key,按 LRU 找出过期/冗余项,然后批量删除磁盘文件
- 每次扫描+删除完成后,会休眠
manager_sleep指定的时间,再开始下一轮
合理设置 manager_sleep 的参考依据
- 默认值是 200 毫秒(部分版本为 50ms),适合中小流量场景
- 如果服务器 I/O 压力大(如机械盘、高并发写入),可适当拉长到 300–500ms,减少频繁磁盘删文件带来的抖动
- 若缓存更新极快、
inactive设得很短(如 60s),且max_size接近上限,可缩短至 100ms 加速清理节奏 - 不建议低于 50ms:太短会导致进程几乎持续运行,占用不必要的 CPU 时间片
配合其他参数协同调优
-
manager_files(单次最多删多少个文件)和manager_sleep共同决定清理吞吐节奏- 例如:
manager_files 200; manager_sleep 300ms≈ 每秒处理约 666 个过期文件
- 例如:
-
manager_threshold(单次循环最大耗时)也要留意,避免某次扫描卡太久;若常触发该阈值,说明manager_files可能设得偏大,或keys_zone内存不足导致查找变慢
实际配置示例
proxy_cache_path /var/cache/nginx/mycache levels=1:2 keys_zone=mycache:10m inactive=60m max_size=2g manager_files=150 manager_sleep=250ms manager_threshold=150ms;
这个配置适用于日均请求 50 万、缓存命中率约 70% 的中型 Web 服务,兼顾响应及时性与系统平稳性。
调优本质是平衡——让缓存空间回收既不过于滞后,也不抢夺主线程资源。观察 nginx -s reload 后的 error.log 中是否有 cache manager process ... exited on signal 11 或大量 cache file not found 提示,往往是节奏失配的信号。


















