keys_zone是为缓存键及元数据分配的共享内存区,不存响应体,应按预估并发缓存key数×1KB÷1024估算大小,常见合理范围为8m–256m,过小致伪未命中,过大则浪费且可能引发slab延迟。
fastcgi_cache_path 中的 keys_zone 参数,就是用来分配内存缓存的——它不存实际内容,只存“哪些 URL 缓存了、存在哪”的映射关系(类似目录索引),这部分必须驻留在共享内存中,供所有 worker 进程快速查表。
内存大小不是越大越好,也不是越小越省,关键看并发缓存 key 的数量:
很多人只关注磁盘空间(max_size),却忽略 keys_zone 满了会直接“失能”:
keys_zone=phpcache:64m 却长期有 3 万活跃 key,新请求无法建索引 → 持续 HIT 变 MISSED
Cannot allocate memory”levels=0 或省略 levels,导致 key 冲突加剧,间接推高 keys_zone 实际开销上线后别只看配置,要实测 key 使用率:
nginx -T | grep fastcgi_cache_path 确认生效配置http://your-site.com/nginx_status(需开启 stub_status)或查 nginx -s stats 输出,观察 cached keys 和 max keys 比值inactive 时间调整(如从 1h 改为 30m),可降低 key 总量,缓解内存压力内存缓存分配本质是平衡“查得快”和“装得下”,配准 keys_zone 才算真正激活 FastCGI 缓存能力。