使用Vagrant + Homestead在虚拟机上使用VirtualBox时,文件上传速度缓慢

4
所以我使用 Laravel 的 Homestead 提供的 VirtualBox 容器,在我的 OSX 环境中设置了一个 Vagrant 虚拟机。我使用了 nfs 选项来共享我的目录到本地环境,这大大提高了响应速度。在典型的应用程序上,每个页面的加载速度约为 20-40 毫秒。然而,我发现文件上传非常慢。我可以在一个简单的表单上上传一个 1MB 的文件,但需要大约 30 秒到 1 分钟的时间。这是正常的吗?除了使用 nfs 共享外,还有没有加快速度的方法?

如果有人正在寻找使用nfs选项来加快响应时间的方法,这里提供一个链接:https://coderwall.com/p/2nak4q/use-nfs-to-speed-up-your-homestead-vm - zeckdude
2个回答

8
这个问题困扰我有一段时间了,无论我怎么尝试调整Vagrant或VirtualBox的设置(如sendfile、NFS、调整数据包大小等),都没能解决。但是,在类似于上传图像失败的问题上,通过这个答案的帮助,我终于解决了:
对我来说,关键是将我的hosts文件更改为将我的Homestead域名解析为homestead VM的IP 192.168.10.10,而不是127.0.0.1。(这样做时,您还需要从URL中删除端口:8000,因此只需导航到homestead.app)。
这将我的文件上传速度从约25 KB / sec提高到5980 KB / sec!
看起来Laravel文档已在一周前更新以反映此更改。我想知道你的Yosemite安装是否与文档更改同时进行,以及您是否在旧的主机设置中将其指向127.0.0.1
尽管Laravel文档已经进行了更正,因此此问题不应该出现在新的Homestead安装中,但仍然有许多教程在网络上流传,建议将Homestead域名解析为127.0.0.1。希望这个答案能帮助避免一些恼人的问题!

这听起来大概是对的。我正在使用私有IP而不是我的本地主机IP。另外,我在使用Vagrant时还遇到了一个烦恼。http://stackoverflow.com/questions/26447926/why-doesnt-vagrant-clean-nfs-exports-file - David
1
是的,我相信上传速度慢是使用localhost的结果,因为您的虚拟机需要等待上传数据从本地端口8000转发到VM的端口80。将您的域指向VM的私有IP意味着上传数据更直接地发送到VM。(顺便说一句,在被接受的答案中,关闭NFS的“sendfile”和NFS本身与此问题无关,因为将文件上传到您的vagrant框不会触及共享文件夹中的任何内容。) - damiani
感谢@damiani,这对我非常有效。这让我感到非常困扰。顺便说一下,我还必须更改我的某些设置以适应我的情况。在/etc/php5/fpm/php.ini中,我添加了:upload_max_filesize = 1024M post_max_size = 1024M并在/etc/nginx/nginx.conf中:client_max_body_size 1024m; - Chris Riebschlager

4

我能想到的解决方法:

  • 编辑 /etc/nginx/nginx.conf,找到 "sendfile" 设置并将其改为 "off" (有报道称使用 NFS 时打开该设置会导致一些问题);
  • xdebug 启用会降低程序运行速度,虽然不太可能会像你发现的那样有很大的差异,但如果其他方法无效,则可以禁用它来查看是否有帮助;

如果上述方法都没有帮助,请在 Github 上创建一个存储库以重现该问题,并让我查看,看看能否找到解决方案。


实际上...虚惊一场..我很兴奋,因为我以为它已经解决了,但我猜它没有。我会尽快发布一个仓库来隔离这个问题。 - David
好的,当你准备好了,请告诉我,我会尝试重现这个问题。 - borfast
我刚刚重新安装了Yosemite,现在这个问题已经没有了。有时候它会有点慢,但有时候又很快。我只能接受这种情况。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接