【问题标题】:Slow File Uploads on virtual machine using virtualbox with vagrant + homestead使用带有 vagrant + homestead 的 virtualbox 在虚拟机上缓慢上传文件
【发布时间】:2014-10-08 13:33:27
【问题描述】:

所以我使用 laravel 家园提供的虚拟盒子容器设置了一个带有 vagrant 的虚拟机。 (在我的 osx 环境中)

我使用 nfs 选项方法将我的目录共享到我的本地环境,这大大加快了响应时间。在一个典型的应用程序上,我每页的加载时间大约为 20-40 毫秒。但是,我注意到文件上传非常慢。我可以在一个简单的表单上上传一个 1MB 的文件,该表单对文件没有任何作用,大约需要 30 秒到一分钟。这是正常的吗,或者除了使用 nfs 共享之外,还有什么方法可以进一步加快速度。

【问题讨论】:

标签: laravel vagrant virtualbox


【解决方案1】:

这让我发疯了一段时间,再多玩弄 Vagrant 或 VirtualBox 的设置(sendfile、NFS、调整数据包大小等)也无济于事。但在this answer 的帮助下,解决了与图片上传失败有关的类似问题,我终于破解了它:

对我来说,关键是更改我的 hosts 文件以将我的 Homestead 域解析为 homestead VM 的 IP 192.168.10.10,而不是 127.0.0.1。 (执行此操作时,您还会从 URL 中删除端口 :8000,因此您只需导航到 homestead.app)。

这将我的文件上传速度从大约 25 KB/秒更改为 5980 KB/秒!

Laravel 文档似乎在一周前更新以反映这一变化。我想知道您的 Yosemite 安装是否与文档更改同时发生,并且您使用 192.168.10.10 设置新框,而旧主机设置指向 127.0.0.1

尽管 Laravel 文档已得到更正——所以这个问题不应该出现在新的 Homestead 安装中——仍然有很多教程建议将 Homestead 域解析为 127.0.0.1。希望这个答案将有助于避免一些恶化!

【讨论】:

  • 这听起来很对。我使用的是私有 ip 而不是我的本地主机 ip。另一方面,我对流浪汉有另一个烦恼。 stackoverflow.com/questions/26447926/…
  • 是的,我认为上传缓慢是使用 localhost 的结果,因为您的虚拟机需要等待上传数据从本地端口 8000 转发到 VM 的端口 80。更改您的域指向您的虚拟机的私有 IP 意味着上传数据更直接地进入虚拟机。 (顺便说一句,在接受的答案中,关闭 NFS 的“sendfile”——实际上是 NFS 本身——对这个问题没有任何影响,因为将文件上传到你的 vagrant box 不会触及任何共享文件夹。)
  • 谢谢@damiani,这对我完全有用。它一直让我发疯。 FWIW,我还必须根据我的情况更改一些设置。在/etc/php5/fpm/php.ini 中我添加了:upload_max_filesize = 1024M post_max_size = 1024M/etc/nginx/nginx.conf 中:client_max_body_size 1024m;
【解决方案2】:

我想到的事情:

  • 编辑/etc/nginx/nginx.conf,找到“sendfile”设置并将其更改为“关闭”(我看到一些报告说有人在使用 NFS 时打开它会出现一些问题);
  • 启用 xdebug 会减慢速度,虽然我不认为它会产生像您注意到的那样巨大的差异,但如果没有其他工作,可能值得禁用它,看看是否有帮助;

如果这些都没有帮助,请在 github 上创建一个 repo 以重新创建问题,我会看看,看看是否找到任何东西。

【讨论】:

  • 实际上......误报......我很兴奋,因为我认为它已经修复了它,但我想它没有。我会尽快发布一个 repo 来隔离问题。
  • 好的,当你这样做时告诉我,我会尝试重现该问题。
  • 我刚刚重新安装了优胜美地,现在没有问题了。有些时候它有点慢,但有些时候它很快。我只会忍受它。
猜你喜欢
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2017-09-17
相关资源
最近更新 更多