在Vagrant环境中Drupal非常慢

时间:2013-02-26 15:32:33

标签: drupal drupal-7 vagrant

我已经开始将很多开发环境迁移到Vagrant。到目前为止,这几乎对所有事情都很好,但我们的第一次Drupal迁移无法使用。这令人难以置信地缓慢。我们的Wordpress,CakePHP和Node.js网站都表现得非常充分或更好,但不是Drupal。这个想法只是糟糕

该盒子是Veewee创建的Ubuntu 12.04 64bit机器。它与我们用于所有基于Web的项目的基本框相同,因此没有什么独特之处。在我的sites目录中,我有一个带有所有站点资源的规范目录(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个不同的数据库执行标准安装:

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

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

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

11 个答案:

答案 0 :(得分:11)

我也受到类似问题的打击。似乎VirtualBox共享文件夹can be very slow for project tree with +1000 files

Switching to NFS可能是解决方案。

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

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

如果您使用exact32 vagrant box作为起点,值得注意的是默认情况下该框只有360MB RAM。

向上推(至少在Vagrant V2中使用VirtualBox),如此

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

这让Drupal对我的响应更快。

答案 3 :(得分:3)

它只是一个PHP / MySQL应用程序,因此Drupal除了如何定制之外没有太多特别之处。你可能已经做了一些,但这里有一些建议来隔离这个问题。

  • 检查Drupal dblog是否有错误。
  • 检查你的nginx& php记录错误。
  • 考虑一下您运行的活动模块数量(超过100个?这将是一个非常繁重的安装)
  • 安装一个新的Drupal实例&相比。这可能会将问题与您的实例隔离开来,而不是一般的Drupal。

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

  • 安装devel模块并启用内存报告,以便了解每页加载时使用的内存量,以及有改进的基线。
  • 确保安装了APC或其他PHP opcache,并确保命中率良好。如果您之前没有运行它,请注意devel。
  • 报告的内存使用差异
  • 运行类似xhprof的东西或禁用可疑模块,直到找到主要罪犯。
  • 启用mysql slow&索引日志以查找潜在问题,然后添加索引或采取其他适当的措施

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

答案 4 :(得分: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无济于事;这恰好是银弹。

答案 5 :(得分:2)

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

您可以在此处详细了解:http://www.vagrantup.com/blog/feature-preview-vagrant-1-5-rsync.html

答案 6 :(得分:1)

我正试图自己解决这个问题。我在Rails Windows Vagrant very slow response time处尝试了这些建议。没有真正的运气,在没有真实数据渲染的温暖请求下,我在1800毫秒的响应时间内减少了200毫秒。这与Ruby on Rails,而不是Drupal。但问题是一样的。

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

Vagrantfile:

  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

答案 7 :(得分:0)

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

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

我会考虑你在哪里进行缓存。例如,在VM上而不是在DB中缓存memcached。

答案 8 :(得分:0)

我遇到了同样的问题。这些建议对使用Windows主机的用户特别有用。没有NFS supoort,你将无法获得不错的性能(对于Windows来说这是一个很大的问题),所以:

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

    config.vm.synced_folder "../data", "/vagrant", disabled: true
    
  2. Windows主机上的来宾VM +网络驱动器中的Setub samba服务器。 有很多文章如何做,例如:https://www.liberiangeek.net/2014/07/ubuntu-tips-create-samba-file-server-ubuntu-14-04/

答案 9 :(得分:0)

如果与Vagrant的NFS共享对你来说仍然太慢,你可以这样做:

答案 10 :(得分:0)

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