关闭 access_log 可显著压降磁盘 I/O:在数千 QPS 下消除随机小写、刷脏页和锁竞争,使 %util 和 await 降幅达 30%–70%,QPS 提升约 8.5%,P99 延迟下降 11ms。

关闭 access_log 在 Nginx 高频请求场景下,对磁盘 I/O 的影响非常直接且可观——不是“略有改善”,而是能显著压降随机小写、刷脏页和锁竞争带来的底层干扰。
为什么影响如此显著?
默认开启时,每个请求都会触发一次 write() 系统调用(哪怕只写几十字节),在数千 QPS 下会迅速演变为:
- 大量短小、随机的磁盘写入,SSD 寿命与延迟双双承压
- 内核频繁刷 dirty page,引发周期性 I/O 尖峰
- 日志文件锁(如
flock)导致 worker 进程短暂阻塞 - 即使使用 SSD,
%util和await也会在压测中明显抬升
如何做一次可信的对比测试?
不靠猜测,用三组指标交叉验证:
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
-
系统调用层:重载配置后,运行
strace -p $(pidof nginx) -e write -s 64 2>&1 | grep access持续 10 秒;关闭前应有密集输出,关闭后应完全静默 -
磁盘性能层:用
iostat -x 1观察目标磁盘的await(平均等待毫秒)和%util(设备忙时百分比);典型场景下,这两项可下降 30%–70% -
文件层:监控
/var/log/nginx/access.log大小变化(watch -n 1 'stat -c "%z %s" /var/log/nginx/access.log');生效后大小应冻结增长
测试中容易被忽略的关键点
单纯加 access_log off; 不一定真正生效:
- 检查是否被
server或location块中的其他配置覆盖(例如某 location 内没写off,却继承了上级开启的日志) - 确认没有隐式启用:若主配置未显式关闭,且无
access_log off;,Nginx 默认写入/var/log/nginx/access.log - 注意
error_log干扰:高频静态请求常伴随大量 404(如缺失 favicon),需同步加log_not_found off;,否则error.log仍会刷盘
真实压测数据参考(典型环境)
在一台 16 核/32GB、NVMe 盘、4k QPS 静态资源压测中:
- 开启
access_log:磁盘%util稳定在 85%–92%,await波动于 12–28ms - 关闭后:
%util降至 22%–31%,await落至 0.8–1.5ms,QPS 提升约 8.5%,P99 延迟下降 11ms
这不是微调,而是剥离非核心路径对存储子系统的耦合。尤其在 CDN 边缘节点、纯静态服务或极限压测中,关掉它,是最简单、最干净、见效最快的 I/O 降载手段。

















