12

我已经开始将我们的很多开发环境迁移到 Vagrant。到目前为止,这对几乎所有事情都很好,但是我们的第一个 Drupal 迁移无法使用。它慢得令人难以置信。我们的 Wordpress、CakePHP 和 Node.js 站点的性能都非常好或更好,但 Drupal 则不然。这种想法简直太可怕了。

盒子是 Veewee 创建的 Ubuntu 12.04 64 位机器。它与我们用于所有基于 Web 的项目的基本盒子相同,因此没有什么独特之处。在我的站点目录中,我有一个sites/my-site/包含所有站点资源的规范目录sites/dev.mysite.com -> /vagrant/www/sites/my-site

这是一个混合的 Windows/OSX 开发团队,在两个平台上都很慢。我唯一的半非常规片段Vagrantfile是这样的:

config.vm.forward_port 80, 8080

config.vm.share_folder( "v-root", "/vagrant", ".", :extra => 'dmode=777,fmode=777' )

# Allows symlinks to the host directory.
config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]

Vagrant::Config.run do |config|
  config.vm.provision :shell, :path => "provision.vm.sh"
end

我的 shell 配置器只做几件事:

  • 安装 drush
  • 创建上述到规范站点目录的符号链接
  • 写出一个 Nginx 服务器块
  • 如有必要,创建一个settings.php文件。

我能做些什么来提高性能吗?喜欢,很多?

更新

我已将其范围缩小到看起来问题出在远程数据库的程度。为了比较苹果和没有项目包袱的苹果,我下载了 Drupal 7.21 的新副本,并从 Vagrant Web 服务器对 3 个不同的数据库执行了标准安装:

  • 在与网络服务器 (localhost) 相同的 Vagrant VM 上创建的新数据库
  • 在原始问题 (dev) 中使用的共享开发服务器上创建的新数据库
  • 在 EC2 实例上创建的新数据库 (tmp)

完成后,我登录到新的 Drupal 安装并加载主页 (localhost:8080) 5 次。然后我连接到每个数据库并以相同的方式加载相同的页面。我发现当 Drupal 连接到远程数据库时,页面加载速度慢了 4-6 倍。

请记住,这是一个全新的(标准)安装。没有项目包袱。

4

11 回答 11

11

我也遇到了类似的问题。对于具有 +1000 个文件的项目树,VirtualBox 共享文件夹似乎非常慢

切换到 NFS可能是解决方案。

于 2013-04-11T09:29:30.933 回答
5

几乎可以肯定,这个问题要么是skip_name_resolve(在 中需要my.cnf)要么是 VirtualBox 对包含大量文件的共享目录的糟糕处理。两者都很容易追踪strace -c,但您可能会发现一次更正一个并查看哪一个解决了您的性能问题会更容易。

如果在这两项更改之后您仍然看到速度缓慢,请告诉我,我们可以进一步调试它。

于 2013-05-17T14:17:47.693 回答
4

我是通过谷歌来到这里的,所以我正在回复,希望其他人觉得这很有用。

如果您使用精确32 vagrant box 作为您的起点,值得注意的是该盒子默认只有360MB 的RAM。

像这样向上运行(至少在带有 VirtualBox 的 Vagrant V2 中)

config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
end

这使 Drupal 对我的响应更加灵敏。

于 2013-06-25T14:45:30.867 回答
3

它只是一个 PHP/MySQL 应用程序,因此 Drupal 除了如何定制之外并没有什么特别之处。您可能已经完成了其中的一些操作,但这里有一些隔离问题的建议。

  • 检查 Drupal dblog 是否有错误。
  • 检查您的 nginx 和 php 日志是否有错误。
  • 考虑您正在运行多少个活动模块(超过 100 个?那将是一个非常繁重的安装)
  • 安装一个新的 Drupal 实例并进行比较。这可能会将问题隔离到您的实例,而不是一般的 Drupal。

如果你发现它是你的 Drupal 实例

  • 安装 devel 模块并启用内存报告,这样您就知道每次页面加载使用了多少内存,并有一个改进的基线。
  • 确保您安装了 APC 或其他 PHP opcache,并确保命中率良好。如果您之前没有运行过它,请注意 devel 报告的内存使用差异。
  • 运行 xhprof 之类的东西或禁用可疑模块,直到找到主要违规者。
  • 启用 mysql slow & index log 以发现潜在问题,然后适当添加索引或采取其他措施

如果您的其他应用程序运行良好,我怀疑某个特定模块存在问题,或者您安装的 Drupal 通常需要一些优化或更多内存。

于 2013-02-26T16:17:55.907 回答
3

我尝试了几乎所有方法来让我缓慢的 Vagrant 加速,最后在项目的问题跟踪器中偶然发现了这一点。

config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    v.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
end

我之前尝试过 NFS 无济于事;这恰好是银弹。

于 2014-07-07T19:04:44.490 回答
2

从 Vagrant 1.5 开始,您可以使用 rsync 作为将文件夹同步到客户机的机制。因为 rsync 将文件直接复制到远程文件系统上,所以性能明显优于 NFS 和 VM 共享文件夹。

您可以在此处阅读更多相关信息:http ://www.vagrantup.com/blog/feature-preview-vagrant-1-5-rsync.html 。

于 2015-05-01T01:41:18.663 回答
1

我只是想自己解决这个问题。我在这里和 Rails Windows Vagrant 尝试了这些建议,响应时间非常慢。没有真正的运气,在没有呈现真实数据的情况下,我将 1800 毫秒的响应时间缩短了 200 毫秒。这使用 Ruby on Rails,而不是 Drupal。不过,问题是一样的。

将共享文件夹切换到 Rsync 后,我对同一请求的响应时间约为 280 毫秒。

流浪文件:

  config.vm.synced_folder '.', '/vagrant', type: 'rsync',
                                       rsync__exclude: '.git/'

用法:

$ vagrant up
$ vagrant rsync-auto

后一个命令将监视您的工作目录并自动更改同步。

请参阅https://www.vagrantup.com/docs/synced-folders/rsync.htmlhttps://www.vagrantup.com/docs/cli/rsync-auto.html

于 2017-02-21T23:27:24.627 回答
0

延迟是任何服务器环境中数据库连接的一个大问题。即使只是在数据库连接上运行加密也将是一个重大的性能问题,尽管在这些条件下可能需要它。

您对数据库的 ping 时间是多少?如果您运行的每个查询至少有一次往返,那么这将加起来。再加上一点加密时间。又更糟了。如果您不使用持久数据库连接。

我会考虑你在哪里做缓存。例如,缓存在 VM 上的 memcached 中,而不是在数据库中。

于 2013-06-05T14:23:27.837 回答
0

我遇到了同样的问题。这些建议对那些使用 Windows 主机的人特别有帮助。如果没有 NFS 支持,您将无法获得不错的性能(对于 Windows,这是一个大问题),因此:

  1. 根本不要使用同步文件夹。

    config.vm.synced_folder "../data", "/vagrant", disabled: true
    
  2. 在 Windows 主机上的来宾 VM + 网络驱动器中设置 samba 服务器。有很多文章如何做到这一点,例如:https ://www.liberiangeek.net/2014/07/ubuntu-tips-create-samba-file-server-ubuntu-14-04/
于 2016-08-07T09:52:36.447 回答
0

如果与 Vagrant 共享的 NFS 对您来说仍然太慢,您可以执行相反的操作:

于 2017-01-24T17:00:12.400 回答
0

安装 nodejs 和 gulp 后,我开始在 drupal 站点上获得缓慢的性能。我必须这样做,因为 drupal bootstrap 4 barrio sass 子主题需要 nodejs/gulp。然后我在 Windows 和 npm install 命令中遇到了 vagrant 的问题。所有 npm install 命令都会失败,因为它们会创建符号链接并且 Windows 操作系统无法识别这些链接。我必须创建一个指向站点 node_modules 文件夹的符号链接到我的 vagrant 主目录。npm install 命令在执行此操作后起作用。但后来我开始注意到这个网站上的响应非常缓慢。我的其他网站运行速度很快。

于 2021-06-19T15:54:56.867 回答