【发布时间】:2018-03-04 04:12:51
【问题描述】:
Apache 文档包括 EnableSendfile 的以下语句:
使用网络挂载的 DocumentRoot(例如 NFS、SMB、CIFS、FUSE),内核可能无法通过自己的缓存提供网络文件。[1]
Apache 2.4 和 Nginx 的默认配置禁用 sendfile()。
我试图找到一些具体的东西来描述在 Linux 上将 sendfile() 与 NFS 文件系统一起使用时的确切问题。在内核 3.10.0-327.36.3 (CentOS 7) 上运行一个最小的测试程序会验证 sendfile() 在源位于 NFS 上时确实有效,并且它确实从页面缓存中读取(第一次运行很慢,随后很快, drop_caches 使其再次变慢,即从源重新读取)。我尝试使用高达 1G 的文件大小,一切似乎都正常。我假设一定有一些情况可以揭示错误的行为,但我想确切地知道那是什么。
作为比较,有一些关于 VirtualBox 卷在 sendfile()[2] 中存在的问题的文档,但我找不到类似的内容涵盖 Apache,或者如何复制有问题的配置。
【问题讨论】:
标签: linux apache nginx nfs sendfile