嗨,我想知道我应该考虑哪些常规选项来优化 nginx 服务器以进行大文件下载(通常为 100mb 到 6gb)。我刚刚从 lighttpd 迁移过来,我注意到在下载过程中,速度波动很大,非常快。我熟悉速度波动,但以这种速度,lighttpd 几乎没有波动那么多。我想知道作为 nginx 新手,我是否应该考虑一些常规事项。我应该增加工作池数量吗,等等。
我正在浏览HttpCore模块我发现了类似这样的directio
选项:
该指令允许使用标志 O_DIRECT (FreeBSD、Linux)、F_NOCACHE (Mac OS X) 或 directio() 函数 (Solaris) 读取大小大于指定大小的文件。该指令禁止对此请求使用 sendfile。该指令可能对大文件有用
这是一个值得尝试的选择吗?谢谢大家,我很感激你们的帮助。
我知道我的问题可能很广泛,但就像我说的,作为 nginx 新手,我想知道我可以选择哪些选项来优化服务器的文件下载。我知道有多种因素在起作用,但我也知道 lighttpd 在完全相同的服务器上波动不大。
谢谢!
答案1
您有多少内存?您的服务器有什么样的工作量?它只提供大文件服务,还是也提供小文件和/或代理请求?
当活动文件集大于 RAM 时,DirectIO 很有用,因此它们无法放入缓存中,并且缓存它们是无用的 - 最好直接从磁盘读取它们并将缓存留给其他东西。
至于波动 - 这可能是由于 nginx 工作程序锁定磁盘操作(默认情况下它们是同步的)造成的。尝试增加工作程序数量或尝试使用异步 i/o(aio on)。但要小心:过于异步的 io 或大量的工作程序可能会导致更大的寻道率,因此整体速度可能会急剧下降。