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

opencart site becomes extremely slow after migrating to new server

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

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

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

新机:Xeon-D 1540 (8核16线程, 2.0-2.6GHz) with 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 平台安装程序安装 opencart 的新副本,并且该站点响应迅速。所以我认为它排除了任何与硬件相关的问题。这是我的嫌疑人和问题清单:

提前致谢!

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

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

  1. 缓存尝试失败后,为什么 php-gd2 不清理缓存文件并重新创建新文件?
  2. php-gd2 库处理 jpeg 图像的效率似乎很低 - 我仍然很难理解 Broadwell 8 核机器需要 20 秒来处理 ~10 张图片这一事实(他们每个人的大小约为4M)。是否有替代 php-gd2 的图像处理方法?

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

将 /catalog/model/tool/image 上的第 13 行更改为

。php
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。