access_log 中 flush=时间值需配合 buffer 使用,如 buffer=64k flush=5s;仅对 access_log 生效,须 reload 生效,推荐 buffer=32k–64k 且 flush≤2s 以平衡延迟与可靠性。
直接在 access_log 指令中加上 flush=时间值 即可设定缓冲区最长驻留时间,比如 flush=1s 表示最多等 1 秒就强制落盘。这个参数必须配合 buffer 使用,单独设置无效。
它不是独立开关,依赖 buffer 存在才能起作用:
buffer=大小(如 buffer=64k),否则 flush 被忽略log_format 必须在 access_log 之前定义好access_log 生效,error_log 不支持该参数按业务场景权衡延迟容忍度和可靠性:
写法要规范,生效需 reload:
access_log /var/log/nginx/access.log main buffer=64k flush=5s;
s(秒),不支持 ms 或 m
worker_processes × buffer_size
nginx -s reload 生效,无需重启进程strace -p $(pgrep nginx) -e write 观察实际刷盘频率,验证是否按预期触发大 buffer + 长 flush 是高危组合:
buffer=128k flush=30s,低流量时可能几十秒才凑满缓冲,日志“卡住”不落盘