这是VirtualBox中的旧漏洞(参见:
#819,
#9069,
#12597,
#14920),其中vboxvfs似乎存在一些与同步文件的mmapped访问有关的问题。
当您在VM之外编辑文件并希望在VM中看到相同的更改时,可能会发生这种情况。
为解决此问题,您需要禁用内核sendfile支持以通过禁用
EnableSendfile
选项将文件传递给客户端,在
httpd.conf
或vhosts文件中禁用它。
<Directory "/path-to-nfs-files">
EnableSendfile Off
</Directory>
这对于NFS或SMB挂载的文件尤其麻烦。更改后重新加载Apache。
对于Nginx
类似(在nginx.conf
中),例如。
sendfile off;
另一个解决方法是记住不要在主机上编辑文件,或尝试在虚拟机内重新编辑同一文件。
另一个解决方法包括丢弃Linux页面缓存,例如:
echo 1 > /proc/sys/vm/drop_caches
如果想每秒清除缓存(根据这篇帖子),请尝试以下操作:
watch -n 1 $(sync; echo 1 > /proc/sys/vm/drop_caches)
注意:数字1代表释放页面缓存,2代表释放目录项和索引节点,3代表同时释放页面缓存、目录项和索引节点。
可以通过以下mmap-test程序复制上述问题,请参见:mmap-problem.c
。