先把当时的情况摆出来。监控只报了磁盘使用率 98%,没人在意,第二天抓取量掉了一半,日志里大量 200 响应但 body_bytes_sent 是 0,打开页面一片空白。

这类报错背后常见的原因有几处,逐个排除就行。日志和缓存写满分区,Nginx 无法写临时文件。另一种情况是PHP 会话写入失败,页面在输出前就中断。

少数情况下是监控只看状态码,没有校验响应体长度。

先确认磁盘与 inode 使用率

df -h / && df -i /

随后找出占空间的大文件

du -sh /var/log/* | sort -rh | head -5

接着清理旧日志并限制轮转大小

logrotate -f /etc/logrotate.d/nginx

复检页面响应体长度

curl -s -o /dev/null -w '%{size_download}\n' https://www.example.com/

这次没动代码,只在配置和运行环境上找原因。

隔了一天再看,现象没变,说明不是偶发。

恢复的判定其实很直接。清理出 6GB 空间后页面恢复完整输出,抓取量第三天回到正常水平,索引没有明显损失。

200 加 0 字节是最容易被监控漏掉的一种故障,巡检里必须把响应体大小作为一项。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189