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,或者如何复制有问题的配置。