output_buffers指令用于控制nginx发送大静态文件时的内存缓冲区大小与数量,仅在sendfile off且响应体较大时生效,语法为output_buffers number size;,默认值2 32k。

output_buffers 指令用于控制 Nginx 在将响应体(尤其是大文件)发送给客户端时,使用的内存缓冲区大小和数量,它直接影响大文件传输的内存占用与吞吐效率。
作用对象与触发条件
该指令仅对 非内存缓存、非代理转发、且响应体较大 的本地静态文件(如通过 alias 或 root 提供的 .iso、.zip、视频等)生效。当响应体超过单个缓冲区大小时,Nginx 会启用多缓冲区机制,避免一次性加载整个文件到内存。
- 若文件小(如
- 若启用了
sendfile on,则优先使用内核零拷贝,output_buffers不起作用 - 只有在
sendfile off且响应需 Nginx 自己读取并写入 socket 时,该指令才生效
语法与典型配置
格式为:output_buffers number size;,其中:
- number:最多可同时使用的缓冲区个数(建议 2–4)
-
size:每个缓冲区大小(单位为字节,支持 k/K/m/M,如
32k)
例如:
output_buffers 4 128k;
表示最多分配 4 个、每块 128KB 的缓冲区,总缓冲上限为 512KB。Nginx 会按需分配,用完即释放,不常驻。
调优建议与注意事项
默认值是 output_buffers 2 32k,对普通网页足够,但对大文件下载需调整:
- 增大
size可减少系统调用次数,提升吞吐,但单次内存占用上升 - 增大
number可提高并发写能力(尤其在高延迟网络下),但会增加内存峰值 - 不建议设过大(如
1m× 8),易导致 worker 进程内存飙升,影响稳定性 - 务必确认
sendfile off且未启用aio或directio,否则配置无效
验证是否生效
可通过以下方式辅助判断:
- 开启
error_log /path/to/error.log debug;,搜索output buffer相关日志 - 用
strace -p $(pgrep nginx) -e trace=write,sendfile观察实际 I/O 行为 - 对比开启/关闭
sendfile时的内存占用(ps aux | grep nginx)与响应延迟变化
注意:该指令属于连接级缓冲控制,不涉及磁盘缓存或 upstream 缓冲,也不影响 gzip 压缩流程。











