如何在 NGINX 上提供大型静态文件时减少 IO 等待?

如何在 NGINX 上提供大型静态文件时减少 IO 等待?

我想知道如何设置 NGINX 来为大型 (1-4 GB) 静态文件提供服务,而无需消除由同时读取引起的磁盘 I/O 等待。文件服务器如何实现这一点?

答案1

这些可以帮助您减少磁盘上的 I/O:

  1. sendfile在 NGINX 中打开。
  2. 对你的分区使用 VFS 文件系统。
  3. output_buffers在 NGINX 中调整。
  4. directio在 NGINX 中禁用。

答案2

为我预读改变了一切。wa(iowait)从30%降到了0。平均负载从4.00降到了0.04,只能通过以下命令将其从256增加到4096:

blockdev --setra 4096 /dev/sda3

成功的故事:https://arstechnica.com/civis/viewtopic.php?f=16&t=35113

教程:http://fibrevillage.com/storage/291-blockdev-command-examples

答案3

只要您能从系统获得预期的性能(响应时间、吞吐量),iowait 并不一定是坏事。可以减少它:

  • 更多的 RAM 可提高文件系统缓存的命中率。
  • 更快的存储系统。

在 Linux 上,考虑线程异步 I/O对于大型请求,使用缓冲 I/O 处理较小的请求。AIO 并不适合所有人,因为它会通过许多并行请求访问存储,并且没有文件系统缓冲区。但它可以让工作任务在 I/O 仍在进行时继续进行。

sendfile       on;
aio            threads;
directio       8m;

相关内容