2015-07-27 4 views
0

Проблема: сайт становится очень медленным после перехода на новый (лучший) сервер, и он , похоже, связан с рендерингом изображения php?сайт opencart становится очень медленным после перехода на новый сервер

Настройка сайта: Opencart 2.0.3.1, ~ 100 продуктов, ~ 10 категорий. Использует настроенную тему и VQMod. Сайт размещен с IIS (PHP 5.6, IIS PHP Manager) на Windows Server 2012 R2 (как старый, так и новый). MySQL DB, поддерживающий opencart, работает на одном компьютере.

Старая машина: Pentium G2020T (двухъядерная 2-х потоковая, 2,5 ГГц) с 10G DDR3, работающая под управлением Windows Server 2012 R2. (Имеется в наличии плата NVidia GT520, если это имеет значение)

Новая машина: Xeon-D 1540 (8-жильная 16-потоковая, 2.0-2.6GHz) с 32G DDR4 под управлением Windows Server 2012 R2 (Aspeed AST2400 onboard видеокарта, если это имеет значение)

Симптомы: на старой установке, загружает сайт сразу без какого-либо задержек, и она очень отзывчива при навигации по различным продуктам. Однако при новой настройке для загрузки домашней страницы требуется около 15-20 секунд, что также относится к каждому отдельному продукту.

Дополнительная информация: 2 сервера имеют идентичную настройку программного обеспечения. То, как я перенес сайт, - это копирование по всему каталогу opencart, а также выполнение дампа MySQL для данных сайта. После миграции я очистил кэш-каталоги (система/кеш, vqmod/cache и т. Д.). Что я заметил, так это то, что это как-то связано с изображениями рендеринга php - любая страница с изображениями загружается очень медленно (только на новой машине). Во время загрузки процесс «php-cgi» занимал около 80% процессорного времени одного ядра на новом хосте (и сохранялся около 20 секунд). Кажется, php-gd2.dll ест все эти циклы процессора.

То, что я подозреваю: Я попытался установить новую копию OpenCart с установщиком веб-платформы Microsoft и сайт был очень отзывчивым. Поэтому я думаю, что это исключает любые связанные с аппаратным обеспечением проблемы. Вот мой список подозреваемых & вопросов:

  • Я ничего не пропустил в процессе миграции?
  • Использует ли PHP какое-либо графическое оборудование для визуализации изображений в Windows? Я с трудом верю, что наличие встроенной видеокарты было причиной быстрой рендеринга на старой машине.

Заранее благодарен!

+0

Возможно ли, что у старой машины было средство кэширования измененных изображений в папку или хранилище временного хранения, к которым новая машина препятствует доступу? Я не знаком с opencart, но большинство уменьшенных изображений и изображений, с которыми я столкнулся на стороне сервера, как-то кэширует результаты. – SuperJer

+0

Это действительно проблема кеширования - она ​​выглядит например, во время процесса миграции я не смог очистить кэширование изображений, и php каким-то образом не смогла создать новые миниатюры кэша, но пыталась сделать изменение размера каждый раз, когда запрашивалась конкретная страница. – sqexpress

ответ

0

Я понял, что проблема - кэш изображений не был очищен во время миграции. Это заставило движок попробовать создавать эскизы изображений каждый раз, когда запрашивается страница. После очистки кеша проблема была решена.

Две вещи остаются для меня странно:

  1. После неудачной попытки кэширования, почему не PHP-GD2 очистить кэшированные файлы и воссоздать новые?
  2. Библиотека php-gd2 кажется очень неэффективной обработкой jpeg-изображений - мне все еще трудно понять, что для обработки ~ 10 снимков потребовалось 8-ядерное устройство Broadwell для обработки 10 снимков (каждый из них составляет около 4 Мб в размере). Есть ли альтернатива php-gd2 для обработки изображений?
0

У меня нет репутации 50, чтобы комментировать ответ sqexpress, но испытал аналогичную проблему с OpenCart 2.0.3.1 в IIS8 на Windows Server 2012 R2 с PHP 5.4.45 и 7.0.7.

Изменение строки # 13 на /catalog/model/tool/image.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 изначально использовался filemtime в версии 1.5.6.4. Не уверен, когда и почему он изменился на filectime.

+0

Это действительно работает очень хорошо. Спасибо Крису! – sqexpress

Смежные вопросы