仅包含一些PHP代码的文件运行良好且快速,对于具有MySQL连接查询的文件也是如此。从我可以看到的一切似乎都运行良好,除了尝试加载Magento中的任何页面。首次加载需要60秒以上,然后Magento缓存启动,后续加载超过20秒,但关键问题仍然是事情开始之前的大量空闲时段。
这不能因为VM Sync功能,因为在这种情况下,没有任何网站文件位于同步文件夹中。我已经构建了脚本来提取和挂载特定目录,因此只需要同步少量文件而不是整个网站。
我已经搜索,研究并尝试了所有我可以用我的人力,我仍在寻找修复。 如果有任何日志有助于找到解决方案,请告诉我在哪里可以找到它们。
是:
由于某些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似乎也不会影响空闲时间。
页面加载统计信息的屏幕截图:
在时间轴中似乎有那些微小的功能(一开始是一堆条纹,然后间隔直到大负载期间发生)。 开头时间轴的前6行是每行中的重复函数:
第1行:定时器已启用
第2行:函数调用
第3行:(匿名函数)
第4行:C
第5行:setTimeout
第6行:安装计时器
答案 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的文件数量确实很疯狂。