【问题标题】:Drupal very slow in Vagrant environmentDrupal 在 Vagrant 环境中非常慢
【发布时间】:2013-02-26 15:32:32
【问题描述】:

我已经开始将我们的很多开发环境迁移到 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 中唯一的半非传统 sn-p 是这样的:

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 倍。

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

【问题讨论】:

标签: drupal drupal-7 vagrant


【解决方案1】:

我也遇到了类似的问题。好像是VirtualBox共享文件夹can be very slow for project tree with +1000 files

Switching to NFS 可能是解决方案。

【讨论】:

  • 我出于好奇尝试过,但没有得到任何形式的巨大性能提升。我在 Windows 上也有一些开发人员,所以对他们来说没用。我发现最大的提升是使数据库本地化。这对实际开发没有好处,但作为测试用例,这显着提高了速度。
  • 在为 Vagrant 中的 Drupal 开发 VM 开发解决方案时,我遇到了类似的问题。为 VM 和本地数据库分配更多 RAM 确实对我的经验有所帮助,但为了后面的人,我将发布我的发现,即为包含许多文件的项目切换到 NFS。
  • 我遇到了严重的速度问题。对我来说,这是增加我的 apc.shm_size 和切换到 NFS 文件系统的组合。这样一来,Drupal 中的页面加载时间缩短了 5-6 秒。
  • 只是跟进,切换到 NFS 使事情的速度提高了一个数量级。 Undine(我在 d.o 上维护的项目)现在在支持它的 boxen 上为其提供了库存配置。请注意,这不是 Windows 的解决方案——虽然我听说你可以通过一些体操来实现它,但我没有亲自证实。
  • NFS 的问题在于,如果需要,您无法为该共享文件夹设置所有者/组。
【解决方案2】:

问题几乎可以肯定是skip_name_resolvemy.cnf 中需要)或 VirtualBox 对包含大量文件的共享目录的不良处理。使用strace -c 很容易找到这两种方法,但您可能会发现一次更正它们并查看哪一种可以解决您的性能问题会更容易。

如果您在完成这两项更改后仍然发现速度缓慢,请告诉我,我们可以进一步调试。

【讨论】:

  • 好吧,这不是skip_name_resolve。我很久以前就加了。即使是大量文件(我认为是),我也不知道如何解决。
  • @RobWilkerson 简单的测试方法——将文件目录拉到本地,而不是将其留在主机上。如果您目前在 DrupalCon,我在核心会议室很乐意为您提供帮助。
  • 我相信关键字是“skip-name-resolve”,而不是“skip_name_resolve”?
  • @Offlein MySQL 将接受配置文件中的任何一个,但在命令行上需要破折号。规范的形式是在 my.cnf 中使用下划线并在命令行中使用破折号,但这实际上是“随心所欲”的情况之一。
【解决方案3】:

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

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

像这样提升内存(至少在带有 VirtualBox 的 Vagrant V2 中)

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

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

【讨论】:

  • 我使用的是 512MB 的自定义盒子,但已将此更改应用到内存,并将很快尝试。谢谢。
【解决方案4】:

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

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

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

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

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

【讨论】:

  • 您找到解决此问题的方法了吗?我的研究似乎表明共享文件夹速度很慢,但我还没有找到加快它们速度的解决方案。
  • @JeroenCoupé - 我仍在努力。这不是首要任务。可能会在本周末了解更多。您能否提供有关“共享文件夹”速度缓慢的任何详细信息?
  • 我发现一个链接似乎表明这是由于网络映射速度慢groups.drupal.org/node/270828,但提供的解决方案对我没有帮助。
  • 在时间允许的情况下,我一直在努力解决这个问题,并隔离了似乎是主要来源的东西。我已经用我发现的内容更新了我的问题。
【解决方案5】:

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

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

我之前尝试过 NFS 无济于事;这恰好是灵丹妙药。

【讨论】:

  • 有趣。我也发现了这个,并没有注意到太大的区别。对我来说,灵丹妙药是使用本地数据库。
  • 我在 1800 毫秒内减少了 200 毫秒的响应时间。使用 Ruby on Rails
【解决方案6】:

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

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

【讨论】:

    【解决方案7】:

    我只是想自己解决这个问题。我在这里和Rails Windows Vagrant very slow response time 尝试了这些建议。没有真正的运气,在没有呈现真实数据的情况下,我将 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

    【讨论】:

    • 我也对使用 rsync 的慢同步频率感到非常恼火。我经常不得不点击两次页面刷新来检查一个小的 CSS 调整,因为第一次同步只进行了一半。
    【解决方案8】:

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

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

    我会考虑您在哪里进行缓存。例如缓存在虚拟机上的 memcached 中,而不是在数据库中。

    【讨论】:

      【解决方案9】:

      我遇到了同样的问题。这些建议对那些使用 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/

      【讨论】:

        【解决方案10】:

        如果与 Vagrant 的 NFS 共享对你来说仍然太慢,你可以做相反的事情:

        【讨论】:

          【解决方案11】:

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

          【讨论】:

            猜你喜欢
            • 2020-08-03
            • 1970-01-01
            • 1970-01-01
            • 2015-04-02
            • 1970-01-01
            • 2013-04-12
            • 1970-01-01
            • 1970-01-01
            • 2021-08-19
            相关资源
            最近更新 更多