直接缓解access_log写入阻塞的核心思路是避免worker进程同步写磁盘,可通过buffer+flush缓冲、转交syslog处理、精准关闭非必要路径日志或极端场景下全局禁用四种方式实现。

直接缓解 access_log 写入阻塞的核心思路是:不让 Nginx worker 进程亲自、频繁、同步地写磁盘。这不是修磁盘,而是把日志写这件事“移出去”或“缓起来”。
启用 buffer + flush 内存缓冲(最简单有效)
这是零依赖、开箱即用的首选方案。Nginx 允许为 access_log 配置内存缓冲区和刷盘时机:
- 在 log 指令后加 buffer=32k flush=1s,例如:
access_log /var/log/nginx/access.log main buffer=32k flush=1s; - 缓冲区满 32KB 或距上次刷盘超 1 秒,就批量落盘一次——把上百次小写合并成一次大写
- 避免设过大 buffer(如 128k+)或过长 flush(如 5s+),否则宕机可能丢日志,安全场景也不容延迟
将日志转给 syslog 守护进程处理
让 rsyslog 或 syslog-ng 承担写盘压力,它们自带队列、缓存、批量写和失败重试能力:
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
- 配置示例:
access_log syslog:server=127.0.0.1:514,facility=local7,tag=nginx main; - rsyslog 需开启 disk-assisted queue(磁盘辅助队列),即使短暂高负载也不会丢日志
- Nginx 只负责发数据到 socket,写磁盘完全异步,worker 进程几乎不感知 I/O 延迟
对高频低价值路径精准关闭日志
不记录,就彻底没有写入。适合健康检查、静态资源等路径,见效最快:
- 在 location 块中直接关:
location = /healthz { access_log off; return 200 "OK"; } - 匹配静态文件:
location ~* \.(ico|css|js|png|jpg)$ { access_log off; } - 配合
log_not_found off;可进一步减少 favicon.ico 等 404 日志刷屏
压测或极端场景下临时禁用 access_log
若目标是纯粹验证服务吞吐能力,应剥离所有非核心干扰:
- 在 http 块顶部加
access_log off;,再在各 server/location 中显式覆盖,确保无遗漏 - 同时建议设
error_log /dev/null warn;,避免错误日志突发刷盘 - 用
strace -p $(pidof nginx) -e write | grep access和iostat -x 1验证是否真正停止写入










