Nginx 不存在 manager_files 配置参数,其缓存清理节奏由 inactive 和 max_size 控制,cache manager 每秒扫描最多100个目录且逻辑硬编码,不可配置文件数;调优应聚焦 inactive 设置、keys_zone 容量及 levels 目录分级。

Nginx 官方文档和实际运行机制中,并不存在 manager_files 这个配置参数。这是个常见误解,可能源于对 Nginx 缓存管理器(cache manager)内部行为的误读或混淆。
真正控制缓存清理节奏的核心参数只有两个:
-
inactive:决定单个缓存条目在无访问后多久被标记为可清理; -
max_size:配合inactive触发主动空间回收时的优先级策略。
而所谓“清理节奏”,实际由 cache manager 的扫描频率和每次处理文件数量上限隐式影响——但这些不可直接配置,Nginx 未暴露 manager_files、manager_sleep 或类似指令。
为什么没有 manager_files 参数?
Nginx 的 cache manager 是一个后台协程,它:
- 每秒唤醒一次(固定周期,不可调);
- 每次最多扫描
100个缓存目录(非文件数),每个目录下遍历部分文件; - 清理动作只针对满足
inactive条件且未被占用的条目; - 扫描深度和文件处理量由源码硬编码控制(如
ngx_http_file_cache_manager中的NGX_HTTP_CACHE_MANAGER_FILES宏,默认值为 100)。
这意味着:
✅ 你无法通过配置项指定“每次清理多少个文件”;
❌ 也不存在 manager_files 500 或类似写法——Nginx 配置语法会报错。
大规模缓存场景下的真实调优路径
当缓存目录中存在数十万甚至百万级小文件(如大量 API 响应、文档片段),清理滞后或磁盘打满,应从以下三方面入手:
-
合理设置
inactive- 过短(如
1m)会导致频繁扫描+无效清理,加重 I/O; - 过长(如
30d)会使冷数据滞留过久,挤占空间; - 建议按业务热度分级:
• 热接口响应:inactive=30m
• 静态资源:inactive=2h
• 归档页/PDF:inactive=7d
- 过短(如
-
增大
keys_zone内存容量-
keys_zone存储每个缓存条目的元信息(含最后访问时间); - 若内存不足,旧 key 会被踢出,导致
inactive计时失效,冷数据无法识别; - 经验值:每 1000 个活跃缓存条目约需 128KB 共享内存;
例如 50 万缓存文件 → 建议keys_zone=docs_cache:64m
-
-
用
levels降低单目录文件密度-
levels=1:2可支撑约 4096 个子目录,平均每个目录 - 若使用
levels=1(仅一级目录),单目录超 10 万文件将显著拖慢扫描效率; - 对超大规模缓存,推荐
levels=1:2:2(三级,共 16×256×256 = 104 万个目录)
-
如何观察清理是否跟得上节奏?
可通过以下方式验证实际效果:
-
查看 cache manager 日志(需开启 debug 日志):
error_log /var/log/nginx/cache_manager.log debug;
搜索
http file cache manager关键字,确认扫描频次与清理条目数。 -
使用
find+stat抽样检查冷文件留存情况:find /var/cache/nginx/docs -type f -mmin +4320 | head -20 | xargs stat -c "%n %z"
(对应
inactive=7d,即 10080 分钟;此处查超 72 小时未修改的文件,辅助判断是否及时清理) 监控
df -h和ls -R /var/cache/nginx/docs | wc -l的趋势变化,避免突增后长期不回落。
不复杂但容易忽略。











