迁移到新服务器后,opencart站点变得非常慢

时间:2015-07-27 21:16:24

标签: php windows iis opencart opencart2.x

问题:迁移到新的(更好的)服务器后,网站变得非常慢,似乎与php图像呈现相关

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

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

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

症状: 在旧设置中,站点立即加载而没有任何延迟,并且在浏览不同产品时响应非常快。但是,在新设置中,加载主页大约需要15-20秒,这同样适用于每个产品。

更多详情: 这两台服务器具有相同的软件设置。我迁移网站的方法是复制整个opencart目录,并为站点数据执行MySQL转储。我在迁移后清理了缓存目录(system / cache,vqmod / cache等)。我注意到的是,它似乎与php呈现图像有某种关系 - 任何带有图像的页面加载速度非常慢(仅在新机器上)。在加载期间," php-cgi"在新主机上,单个核心占用了大约80%的CPU时间(并且持续了大约20秒)。似乎php-gd2.dll正在吃掉所有CPU周期。

我怀疑: 我试图从Microsoft Web Platform安装程序安装一个新的opencart副本,该网站非常敏感。所以我认为它排除了任何与硬件相关的问题。这是我的嫌疑人名单和问题:

  • 我是否在迁移过程中遗漏了任何内容?
  • PHP是否使用任何图形硬件在Windows上呈现图像?我很难相信拥有集成视频卡是旧机器上快速渲染的原因。

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

我还有两件事情很奇怪:

  1. 在缓存尝试失败后,为什么php-gd2不清理缓存的文件并重新创建新文件?
  2. php-gd2库处理jpeg图像似乎非常低效 - 我仍然很难理解这样一个事实:它使用Broadwell 8核机器20秒处理~10张图片(每张图片约为4M)在尺寸方面)。有没有替代php-gd2的图像处理?

答案 1 :(得分:0)

对于sqexpress的答案,我没有50个声誉,但在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。