在 access_log 指令中需配合 buffer 使用 flush=时间值(如 flush=5s),仅对 access_log 有效;必须先定义 log_format 和 buffer,单位仅支持 s,修改后 reload 生效。

直接在 access_log 指令中添加 flush=时间值 即可,比如 flush=5s 表示最多等待 5 秒就将缓冲区内容写入磁盘。这个参数必须配合 buffer 使用,单独设置无效。
flush 参数的生效前提
flush 不是独立开关,它依赖于 buffer 的存在:
- 必须先配置
buffer=大小(如buffer=64k),否则flush被忽略 - 日志格式定义(
log_format)需在access_log之前完成 - 该配置仅对
access_log有效,error_log不支持 flush
常见 flush 时间值建议
根据业务实时性与可靠性平衡选择:
- 1s~3s:适合对延迟敏感但能接受少量丢志的场景(如监控类接口)
- 5s:通用推荐值,兼顾响应速度与断电时日志丢失风险
- 10s 或更长:吞吐优先场景(如日志量极大、磁盘较慢),但故障时可能丢失最多 10 秒日志
实际配置示例与验证要点
正确写法(放在 server 或 http 块中):
access_log /var/log/nginx/access.log main buffer=64k flush=5s;注意以下细节:
- 时间单位只能是
s(秒),不支持 ms 或 m - 每个 worker 进程独享一份缓冲区,总内存占用 =
worker_processes × buffer_size - 修改后需执行
nginx -s reload生效,无需重启 - 可通过
strace -p $(pgrep nginx) -e write观察刷盘频率验证效果


















