首頁 >後端開發 >php教程 >在 Nginx 中,什么场景适合开启 sendfile,什么场景适合开启 directio

在 Nginx 中,什么场景适合开启 sendfile,什么场景适合开启 directio

WBOY
WBOY原創
2016-06-06 20:30:171571瀏覽

在 Nginx 中,什么场景适合开启 sendfile,什么场景适合开启 directio

回复内容:

在 Nginx 中,什么场景适合开启 sendfile,什么场景适合开启 directio

http://nginx.org/en/docs/http/ngx_http_core_module.html#aio

<code>location /video/ {
    sendfile on;
    sendfile_max_chunk 256k; 
    aio threads;
    directio 512k;
    output_buffers 1 128k;
}
</code>

启用aio时会自动启用directio,小于directio定义的大小的文件则采用sendfile进行发送,超过或等于directio定义的大小的文件,将采用aio线程池进行发送,也就是说aio和directio适合大文件下载.因为大文件不适合进入操作系统的buffers/cache,这样会浪费内存,而且Linux AIO(异步磁盘IO)也要求使用directio的形式.

sendfile_max_chunk可以减少阻塞调用sendfile()所花费的最长时间.因为Nginx不会尝试一次将整个文件发送出去,而是每次发送大小为256KB的块数据.

注意,Nginx从1.7.11开始为AIO引入了线程池支持,能够使用多线程读取和发送文件,以免工人进程被阻塞.要启用多线程支持,configure时需要显式加入--with-threads选项.

directio是啥...

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn