在Vagrant开发站点

时间:2016-09-14 14:19:15

标签: vagrant virtualbox magento-1.9

仅包含一些PHP代码的文件运行良好且快速,对于具有MySQL连接查询的文件也是如此。从我可以看到的一切似乎都运行良好,除了尝试加载Magento中的任何页面。首次加载需要60秒以上,然后Magento缓存启动,后续加载超过20秒,但关键问题仍然是事情开始之前的大量空闲时段。

这不能因为VM Sync功能,因为在这种情况下,没有任何网站文件位于同步文件夹中。我已经构建了脚本来提取和挂载特定目录,因此只需要同步少量文件而不是整个网站。

我已经搜索,研究并尝试了所有我可以用我的人力,我仍在寻找修复。 如果有任何日志有助于找到解决方案,请告诉我在哪里可以找到它们。

是:

  • Vagrant 1.8.4
  • VirtualBox 5.0.24
  • CentOS 6.8
  • 的Apache / 2.2.15
  • PHP 5.5.38
  • MySQL 14.14
  • Magento CE 1.9.2.3

由于某些SSH错误,不得不使用较旧的Vagrant版本,反过来我也必须使用较旧的VirtualBox。

Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = "package.box"
  config.vm.network "private_network", ip: "192.168.3.4"
  config.ssh.insert_key = false

  # The code below sets the VM memory to half of the host's and number of CPU cores to 4
  # None of the variations of those VM settings that I have tried affect the idle time when trying to load the site
  config.vm.provider "virtualbox" do |v|
    host = RbConfig::CONFIG['host_os']
    # Give VM 1/4 system memory 
    if host =~ /darwin/
        # sysctl returns Bytes and we need to convert to MB
        mem = `sysctl -n hw.memsize`.to_i / 1024
        elsif host =~ /linux/
        # meminfo shows KB and we need to convert to MB
        mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i 
        elsif host =~ /mswin|mingw|cygwin/
        # Windows code via https://github.com/rdsubhas/vagrant-faster
        mem = `wmic computersystem Get TotalPhysicalMemory`.split[1].to_i / 1024
    end
    mem = mem / 1024 / 2
    v.customize ["modifyvm", :id, "--memory", mem]
    v.cpus = 4
  end

  config.vm.provision :shell, path: "resources/bootstrap.sh"

  config.vm.provision :shell,
    inline: "service httpd start; mount -a -o nonempty",
    run: "always"

  # Run these provisioners when needed with $vagrant provision --provision-with name
  if ARGV.include? '--provision-with'
    config.vm.provision "site", type: :shell, :inline => "source /vagrant/resources/build_site.sh"
  end

end

我使用kaorimatz / centos-6.8-x86_64基本框,设置LAMP堆栈,进一步配置机器并将其打包为此基本框。

PHP memory_limit似乎也不会影响空闲时间。

页面加载统计信息的屏幕截图:

  • "页面加载时间" Chrome扩展程序 Page load time extension
  • Chrome开发者工具时间表 Developer Tools Timeline 沿着顶部时间线的页面快照必须是先前的加载,因为在空闲时段结束之前没有任何事情发生,之后当前页面会在合理的时间内重新加载并重新构建DOM。

在时间轴中似乎有那些微小的功能(一开始是一堆条纹,然后间隔直到大负载期间发生)。 开头时间轴的前6行是每行中的重复函数:

第1行:定时器已启用

第2行:函数调用

第3行:(匿名函数)

第4行:C

第5行:setTimeout

第6行:安装计时器

2 个答案:

答案 0 :(得分:1)

很难确定这是否是您的问题,但我最近一直在与您的设置类似,并发现在Vagrantfile中将v.cpus = 4更改为v.cpus = 1大大改善了Magento页面加载时间。你认为更多的cpu核心会更快,但事实证明Virtualbox并不擅长并行处理,详见下文:

http://www.mihaimatei.com/virtualbox-performance-issues-multiple-cpu-cores/

在这里: https://ruin.io/2014/benchmarking-virtualbox-multiple-core-performance/

在这里: https://forums.virtualbox.org/viewtopic.php?f=3&t=64268

在这里: https://github.com/roots/trellis/issues/410

问题的核心是具有多个vCPU的Virtualbox VM要求在开始处理之前,所有已分配的核心在主机上都是空闲的。因此,对于4个虚拟cpu,每次Virtualbox在主机上调度cpu时间时,它将等待所有4个核心可用。在页面加载过程中,这个等待时间显然会相当多。

无论如何尝试删除虚拟cpu的数量。希望它对你有所帮助。

答案 1 :(得分:0)

我自己解决了这个问题,虽然经过一周的实际解决方案。谢谢所有尝试过帮助的人。

任何人在任何地方构建繁重的开发站点系统,包括虚拟机 - 我最初制造和轻微传递的错误是我将Magento的核心PHP文件安装在SSHFS上以节省存储和复制时间。 SSHFS仍然适用于大型媒体文件夹和不太密集的Magento PHP文件目录,但Magento从index.php开始运行到达构建的DOM的文件数量确实很疯狂。