page cache 占用内存是正常行为,真正需解决的是 swap 颠簸;应关注 available 内存、si/so 指标,并通过优化 nginx 缓存策略与微调内核参数(如 vfs_cache_pressure、swappiness)来缓解。

这不是 proxy_cache 本身的问题,而是它触发了 Linux 内核 Page Cache 的正常行为——大量读取缓存文件时,内核会把它们全放进内存做页缓存。所谓“侵占”,其实是误判;Page Cache 本就该用空闲内存,且随时可被回收。真正要解决的,是避免它间接引发 swap 颠簸(即频繁的 si/so)。
看清真实内存压力,别被 free 输出误导
运行 free -h 时,重点看 available 列,不是 used 或 free。
如果 available 还有 10% 以上(比如 32G 机器还有 3G+),说明系统根本不缺内存,swap 颠簸另有原因。
若 available 持续低于 5%,才表明内存真正紧张——此时 Page Cache 已开始被内核主动回收,但回收速度赶不上新内存申请,才会退到 swap。
确认 Page Cache 是否真在“捣乱”
查 cat /proc/meminfo,关注三行:
• Cached:主要是文件数据页缓存(proxy_cache 文件就在这里)
• SReclaimable:可回收的 slab 缓存(含 dentry/inode,也和大量小文件有关)
• Buffers:块设备元数据缓存(通常较小)
再配合 vmstat 1 看 si(swap in)和 so(swap out)是否持续非零。只有 si/so 波动大,才说明 swap 正被高频使用。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
调整 Nginx proxy_cache 配置,减少缓存文件对 Page Cache 的持续冲击
• 关闭 open_file_cache 或设极短 max 和 inactive 值,避免大量小文件句柄长期驻留,间接拖慢 inode 回收
• 限制 proxy_cache_path 的 max_size,并启用 purger(如 nginx-plus)或定期 find + rm 清理过期缓存,防止缓存目录膨胀、触发大量 page fault
• 对静态资源启用 proxy_cache_use_stale updating,降低回源频率,减少重复读取同一文件带来的缓存重载
• 避免缓存超大文件(如 >100MB 视频),它们会长期霸占大量连续 page,影响回收效率
微调内核参数,让 Page Cache 更“懂事”
• 降低 vm.vfs_cache_pressure(默认 100)到 50–80:让内核更愿意保留 dentry/inode 缓存,减少因目录遍历引发的额外 page fault
• 调高 vm.swappiness(默认 60)到 80–100:听起来反直觉,但它会让内核更早把匿名页(如进程堆)换出,为 Page Cache 留出更多空间,反而减少因内存争抢导致的颠簸
• 不要轻易用 echo 3 > /proc/sys/vm/drop_caches:这是急救手段,不能解决根本问题,还可能引发后续读取毛刺










