Nginx 压测时应关闭 access_log 以消除磁盘 I/O 干扰:通过 grep 定位配置、lsof 验证句柄,采用 http 块全局 + server/location 分层设置 access_log off,并用 strace 和 iostat 验证生效;error_log 也建议设为 /dev/null。

在极致性能压力测试中,Nginx 的 access_log 默认写入会成为显著的磁盘 I/O 干扰源——尤其当请求量达数千 QPS 以上时,频繁小写操作会触发大量随机 I/O、刷脏页、锁竞争,甚至拖慢核心业务路径。关闭它不是“省事”,而是主动剥离非关键路径对存储子系统的耦合。
确认 access_log 当前状态与位置
先检查是否真在写日志:
- 执行
grep -r "access_log" /etc/nginx/,定位所有启用行(含nginx.conf、sites-enabled/下配置) - 注意隐式启用:若主配置中未显式关闭,且无
access_log off;,则默认写入/var/log/nginx/access.log - 用
lsof -i :80 | grep log或pidof nginx | xargs lsof -p | grep access验证 worker 进程是否持有日志文件句柄
正确关闭方式:全局 + 局部双保险
仅在 server 块里写 access_log off; 不够可靠——若 upstream 或 location 中有继承或覆盖,仍可能触发写入。推荐分层关闭:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
-
主配置顶层关闭(最稳妥):
在/etc/nginx/nginx.conf的http块开头添加:access_log off; -
逐级显式覆盖(防遗漏):
在每个server和关键location块内再加一行:access_log off; -
禁用 error_log 写入(可选但推荐):
压力测试期间也应设error_log /dev/null warn;,避免错误日志突发刷盘
验证是否真正生效
改完配置后必须验证,不能只信 reload 成功:
- 执行
nginx -t && systemctl reload nginx - 立即运行
strace -p $(pidof nginx) -e write -s 128 2>&1 | grep -i access,持续几秒,确认无日志写入系统调用 - 观察
iostat -x 1中对应磁盘的await和%util是否明显回落(尤其对比开启前后 30 秒均值) - 检查
/var/log/nginx/access.log文件大小是否冻结增长
替代方案:内存缓冲写入(不推荐用于压测)
如需保留日志用于事后分析,但又不想干扰磁盘,可用以下折中方式(仅限非极限场景):
- 将日志输出重定向到
syslog:access_log syslog:server=127.0.0.1:514,facility=local7,tag=nginx_main;
再由 rsyslog 以 batch 模式异步落盘 - 挂载 tmpfs 内存盘写日志:
mount -t tmpfs -o size=512m tmpfs /var/log/nginx
⚠️ 注意:该方式仍消耗内存带宽,且重启丢失,压测中不解决根本干扰
真正极致压测,目标是让所有资源聚焦于被测服务本身。access_log 是第一个该被物理移除的 I/O 负载点——它不参与业务逻辑,却真实抢走 IOPS 和延迟预算。


















