2013-02-26 38 views
12

我已经开始将很多开发环境迁移到Vagrant。到目前为止,这对于几乎所有的事情都很棒,但我们的第一个Drupal迁移是无法使用的。这是令人难以置信的缓慢。我们的Wordpress,CakePHP和Node.js网站都表现得非常好或更好,但不是Drupal。这只是可怕的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 

我的壳供应者只是做了几件事情:

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

有什么我可以做的,以提高性能?喜欢,很多?

UPDATE

我已经缩小下来到一个地步,它看起来像问题是远程数据库。要比较苹果,没有项目的行李苹果,我下载的Drupal 7.21的全新副本,并进行了标准从流浪Web服务器安装针对3个不同的数据库:

  • 在同流浪VM创建为一个新的数据库网络服务器(本地主机)
  • 在原来的问题(DEV)使用的共享开发服务器
  • 上的EC2实例创建(TMP)

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

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

+0

是否经由主机名或IP地址连接到数据库?数据库是在IPv4还是IPv6上运行? 另外http://serverfault.com/questions/495914/vagrant-slow-internet-connection-in-guest – Danack 2013-06-21 22:48:32

回答

1

我只是试图自己解决这个问题。我在这里尝试了建议,并在Rails Windows Vagrant very slow response time。没有真正的运气,我在1800毫秒的响应时间内,在没有实际数据的情况下,在200毫秒的热度要求下,减少了200 ms。这与Ruby on Rails,而不是Drupal。但问题是一样的。

将共享文件夹切换到Rsync时,对同一请求的响应时间为〜280ms。

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

+0

我也对使用rsync的慢同步频率感到非常恼火。我经常需要两次刷新页面来检查一个小的CSS调整,因为同步只是第一次的一半。 – ringe 2017-03-17 17:23:05

3

这只是一个PHP/MySQL应用程序,所以除了定制之外,关于Drupal并没有什么特别之处。你可能已经做了一些这方面的工作,但这里有一些建议来隔离这个问题。

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

如果你发现这是你的Drupal

  • 安装devel模块,使内存的报告,以便你知道多少内存被每个页面加载使用,以及有一个基本实例改进线。
  • 确保您已安装APC或其他PHP opcache,并确保命中率良好。如果您之前没有运行它,请注意devel报告的内存使用情况差异。
  • 运行xhprof或禁用可疑模块,直到找到主要的罪犯。
  • 启动MySQL慢&指数日志以发现潜在的问题,然后添加索引或采取其他措施适当

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

+0

好吧,看起来我有一些工作在我面前。 :-) 谢谢。 – 2013-02-26 16:44:59

+0

你发现如何解决这个问题吗?我的研究似乎指出共享文件夹速度很慢,但我还没有找到能够加速它们的解决方案。 – 2013-03-07 08:49:59

+0

@JeroenCoupé - 我仍在努力。它不是最优先考虑的事情。在本周末之前可能会知道更多。你能提供关于你的“共享文件夹”缓慢的任何细节吗? – 2013-03-07 14:59:06

11

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

Switching to NFS可能是解决方案。

+0

我出于好奇而试过,但没有得到任何大规模的性能提升。我在Windows上也有一些开发人员,所以对他们没用。我发现最大的提升是使数据库本地化。这对于实际的开发并不好,但作为一个测试案例,这显着提高了速度。 – 2013-04-11 11:56:54

+0

在为Vagrant中的Drupal开发VM开发解决方案时,我遇到了类似的问题。根据我的经验,为虚拟机和本地数据库分配更多RAM肯定有帮助,但为了接下来的这些,我将发布我的研究结果,以便为具有多个文件的项目切换到NFS。 – 2014-02-23 16:23:06

+1

我有严重的速度问题。对我来说,这是增加我的apc.shm_size和切换到NFS文件系统的组合。在Drupal中加入了5-6秒的页面加载。 – 2014-03-01 16:13:22

5

这个问题几乎肯定是skip_name_resolve(在my.cnf中需要)或者VirtualBox对大量文件共享目录的处理不当。两者很容易通过strace -c进行追踪,但您可能会发现只需逐个更正它们,并查看哪一项可修复您的性能问题就更容易了。

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

+0

嗯,它不是'skip_name_resolve'。我很久以前补充说。即使是大量的文件(我认为是这样),我也不知道如何解决这个问题。 – 2013-05-17 15:01:57

+0

@RobWilkerson简单的方法来测试拉文件目录本地,而不是把它留在主机上。如果您目前在DrupalCon,我在核心房间,很乐意协助。 – BMDan 2013-05-24 16:48:44

+0

我相信关键字是“skip-name-resolve”,而不是“skip_name_resolve”no? – Offlein 2014-08-05 17:53:49

0

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

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

我想想你在哪里做你的缓存。例如,缓存在虚拟机上的memcached中而不是在数据库中。

4

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

如果您使用的是精确的流浪者盒子作为出发点,值得注意的是默认情况下盒子只有360MB的RAM。

了RAM(至少在流浪V2与VirtualBox的),像这样

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

这使Drupal的更为敏感的我。

+0

我正在使用512MB的自定义盒子,但已应用此更改来提升内存并将很快尝试。谢谢。 – 2013-06-26 18:22:28

3

我尝试了几乎所有的东西来让我的缓慢流浪加速并最终在项目的问题跟踪器中偶然发现了这个问题。

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

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

+0

有趣。我也发现了这一点,并没有注意到太多的区别。我的银弹是使用本地数据库。 – 2014-07-08 12:51:32

+0

我在1800毫秒的响应时间内减少了200毫秒。使用Ruby on Rails – ringe 2017-02-21 23:14:59

0

我遇到了同样的问题。这些建议对于那些使用Windows主机的人特别有用。您将无法获得无NFS supoort不俗的表现(适用于Windows这是一个大问题),所以:

  1. 完全不使用同步文件夹。

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