调大 proxy_temp_file_write_size 可降低磁盘 I/O 压力、提升大响应或大上传吞吐量,它控制每次向临时文件写入的数据块大小,默认 8k 导致高频小 IO;推荐 SSD 设 128k–512k,内存盘可设 512k 或 1m,但勿超 1m,并需确保 proxy_buffering on、proxy_buffers 足够、proxy_max_temp_file_size 匹配且 temp_path 独立挂载。

调大 proxy_temp_file_write_size 是降低磁盘 I/O 压力、提升大响应或大上传场景吞吐量的关键操作。它不改变是否落盘的逻辑,而是控制每次向临时文件写入的数据块大小——写得太大浪费空间,太小则频繁触发系统调用,拖慢整体性能。
为什么这个值影响吞吐量
默认是 8k,意味着每收到 8KB 数据就执行一次 write() 系统调用。在 GB 级响应或高并发上传时,这会带来海量小 IO,尤其在机械盘或低配云盘上,seek 延迟和上下文切换开销会明显抬高延迟。调大该值可显著减少 write 次数,让磁盘更接近顺序写状态,吞吐自然上升。
合理设置范围与依据
- SSD 或高速 NVMe 磁盘:推荐设为 128k–512k;实测 256k 在多数 CDN 回源或文件下载场景下平衡性最好
- 普通 SATA SSD 或高负载云盘:建议 128k–256k,避免单次写入过大导致短暂阻塞
- 若已将
proxy_temp_path指向内存盘(如/dev/shm/nginx_temp),可设为 512k 或 1m,内存写入无 seek 成本,大块写更高效 - 不建议超过 1m:Nginx 内部对单次写入有隐式限制,过大可能触发内部缓冲截断或兼容性问题
必须同步检查的配套配置
- proxy_buffering 必须为 on:该参数仅在启用代理缓冲时生效;若设为 off,整个缓冲链路绕过,此值被忽略
-
proxy_buffers 总量需足够:例如设了
proxy_buffers 16 256k(共 4MB),再配proxy_temp_file_write_size 512k才有意义;若总 buffer 只有 1MB,大部分数据仍会快速溢出到磁盘 -
proxy_max_temp_file_size 要匹配:若单个响应达 2GB,而
proxy_max_temp_file_size还是默认 1G,Nginx 会在写满 1G 后拒绝后续数据,导致连接中断——此时即使 write_size 调再大也无济于事 -
确保 temp_path 所在分区不与系统日志共用:单独挂载 SSD 到
/var/tmp/nginx_temp或/ssd/nginx/temp,避免 IO 争抢
验证是否真正生效
改完 reload 后,不能只看服务是否启动成功。应结合以下两点判断:
- 用
strace -p $(pgrep nginx) -e write抓一段高峰期 worker 进程的系统调用,观察 write 的 size 参数是否集中在你设定的数值附近(如大量 262144 字节即 256k) - 监控磁盘 I/O 指标:
iostat -x 1中的avgrq-sz(平均请求大小)应明显上升,r/s和w/s下降,%util稳定但不再持续 100%











