openart站点在迁移到新服务器后变得非常缓慢


opencart site becomes extremely slow after migrating to new server

问题:站点迁移到新的(更好的)服务器后变得非常慢,并且它似乎与php图像渲染有关?

站点设置:Opencart 2.0.3.1, ~100个产品,~10个类别。使用自定义主题和VQMod。站点是托管与IIS (PHP 5.6, IIS PHP管理器)在Windows Server 2012 R2(旧的和新的)。在同一台机器上运行支持openart的MySQL数据库

旧机:Pentium G2020T(2核2线程,2.5GHz)与10G DDR3运行Windows server 2012 R2。(如果需要的话,板载NVidia GT520卡)

新机器:Xeon-D 1540(8核16线程,2.0-2.6GHz)与32G DDR4运行Windows Server 2012 R2(速度AST2400板载显卡,如果重要的话)

症状:在旧的设置中,网站立即加载,没有任何延迟,当浏览不同的产品时,它的响应速度非常快。然而,在新的设置中,仅仅加载主页就需要大约15-20秒,每个单独的产品也是如此。

更多细节:这两个服务器具有相同的软件设置。我迁移站点的方法是复制整个openart目录,并为站点数据做MySQL转储。迁移后,我清理了缓存目录(system/cache, vqmod/cache等)。我注意到的是,这似乎与php渲染图像有关-任何带有图像的页面加载非常慢(仅在新机器上)。在加载过程中,"php-cgi"进程占用了新主机上单个核心大约80%的CPU时间(并且持续了大约20秒)。似乎php-gd2.dll正在吞噬所有的CPU周期。

我怀疑:我试图从微软Web平台安装程序中安装一个新的openart副本,该网站的响应速度相当快。所以我认为它排除了任何与硬件相关的问题。这是我列出的嫌疑人名单。问题:

  • 我在迁移过程中错过了什么吗?
  • PHP在Windows上使用任何图形硬件来渲染图像吗?我很难相信集成显卡是旧机器快速渲染的原因。

提前感谢!

我没有50的声誉来评论sqexpress的答案,但在Windows Server 2012 R2上使用PHP 5.4.45和7.0.7的IIS8下的OpenCart 2.0.3.1遇到了类似的问题。

将/catalog/model/tool/image.php中的第13行从

更改
if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_IMAGE . $old_image) > filectime(DIR_IMAGE . $new_image))) {

if (!is_file(DIR_IMAGE . $new_image) || (filemtime(DIR_IMAGE . $old_image) > filemtime(DIR_IMAGE . $new_image))) {

解决了当原始文件是通过迁移到新服务器引入的文件时,在每次页面加载时重新创建缓存文件的问题。

OpenCart最初在1.5.6.4版本中使用了filemtime。不确定何时或为何更改为filectime

我发现了这个问题—在迁移过程中没有清理图像缓存。这导致引擎在每次请求页面时都尝试创建图像缩略图。清理缓存后,问题已解决。

有两件事对我来说仍然很奇怪:

  1. 缓存失败后,为什么php-gd2不清理缓存文件并重新创建新文件?
  2. php-gd2库处理jpeg图像的效率似乎非常低——我仍然很难理解Broadwell 8核机器花了20秒来处理10张图片(每张图片大约4M大小)的事实。有什么替代php-gd2的图像处理?