nginx缓存磁盘占用监控需依赖系统工具+配置联动:用du -sh精准统计缓存目录真实大小,配合脚本采集指标接入prometheus告警;核心靠调优max_size、inactive、keys_zone三项参数实现空间可控,避免缓存与临时文件共盘或deleted文件句柄未释放导致异常占用。

Nginx 本身不提供实时缓存磁盘占用指标,监控必须依赖操作系统工具 + 合理配置联动。核心是把“看不见的缓存增长”变成可采集、可告警、可推断的行为。
用系统命令精准获取实际占用
别只看 df -h,它反映的是整个挂载点使用率,容易被其他文件干扰。真正要盯的是缓存目录本身:
-
du -sh /var/cache/nginx(路径按
proxy_cache_path实际值调整)—— 统计缓存文件真实大小 - find /var/cache/nginx -type f | wc -l —— 查看缓存文件总数,辅助判断是否出现大量小文件堆积
-
ls -lt /var/cache/nginx/*/*/* | head -10 —— 检查最近修改时间,验证
inactive是否生效(比如设了inactive=1h,但列表里全是 2 小时前的文件,说明清理未触发)
自动采集并接入监控平台
写一个轻量脚本定时执行,输出结构化数据供 Prometheus 或 Zabbix 抓取:
- 脚本示例(保存为
/usr/local/bin/nginx-cache-stats.sh):
CACHE_DIR="/var/cache/nginx"
USED=$(du -sb "$CACHE_DIR" 2>/dev/null | awk '{print $1}')
TOTAL=$(df -B1 "$CACHE_DIR" 2>/dev/null | tail -1 | awk '{print $2}')
[ "$TOTAL" -gt 0 ] && echo "nginx_cache_bytes_used $USED" > /var/lib/prometheus/textfile/nginx_cache.prom - 配合
cron每 3 分钟运行一次:
*/3 * * * * /usr/local/bin/nginx-cache-stats.sh - Prometheus 配置
textfile_collector即可拉取nginx_cache_bytes_used指标,画趋势图、设阈值告警(如 >90% 触发)
从配置层面让占用行为更可预期
监控只是手段,真正可控的前提是缓存策略本身不“飘”。重点调好三项:
-
max_size=5g:硬性上限,达到后 cache manager 会主动清理最久未访问的条目 -
inactive=2h:决定“可删”的时间窗口,太长会导致旧内容滞留,太短影响命中率 -
keys_zone=my_cache:50m:内存区必须足够大,否则无法准确记录每个缓存项的最后访问时间,清理逻辑就失效
识别异常占用的两个关键信号
当监控曲线突然上扬或居高不下,先排查这两类问题:
-
缓存与临时文件共用磁盘:检查
proxy_temp_path和proxy_cache_path是否落在同一分区。上传大文件时临时文件 + 缓存增长会双重挤压空间 -
有已删除但未释放的缓存文件:执行
lsof +L1 | grep nginx,若看到/var/cache/nginx/... (deleted),说明 worker 进程仍持有句柄,需 reload 或重启释放











