Большое время отклика/загрузки админ панели в PrestaShop

archive view archive save

prestashop-logo_1.jpg Временами в панели администрирования движка PrestaShop 1.6.x наблюдаются жуткие тормоза вплоть до 2-3 мин и отключение модулей при этом не даёт совершенно никаких результатов.

"Злые люди в туалетах бьются о стульчак и корявыми руками дёргают рычаг, нет воды здесь, нету света, нет здесь ничего, ходят съёмщики как тени, а кругом темно!", о чём это я, ах да, о тормозах..., о тормозах в админке PrestaShop 1.6.x... В общем рецептов нагуглилось не так много, среди прочего:

  1. Перезалить файлы движка и как бы должно помочь;
  2. Проверить, есть ли, с машины на которой работает "престажоп", доступ к таким ресурсам как prestashop.com, api.prestashop.com, addons.prestashop.com, translations.prestashop.com - ибо при отсутствии онного тормоза как раз и возникают;
  3. Потключать модули статистики для админ части;
  4. Протереть монитор, выдернуть шнур и выдавить стекло.

Второй вариант решения проблемы с производительностью мне показался более вменяемым, но проверять смысла не видел имхо все исходящие в фаерволе были разрешены по-молчанию, хотя для успокоения души проверил наличие доступа к вышеупомянутым хостам - доступ есть.

Были предложения уменьшить значение (у нас стояло 120) default_socket_timeout (Значение таймаута по умолчанию (в секундах) для потоков, использующих сокеты.) в php.ini, однако вариант тоже гнилой и не катит ибо проблему то в корне не решает.

Значит решено было любой ценой найти реальный адрес по которому лезло PrestaShop, а ведь именно из-за ожидания ответа на сокете и возникали тормоза имхо процессор во время тормозов совсем не был нагружен, следовательно вариант с перенагрузкой хоста отпадал сразу.

Значит порядок действий по определению хоста к которому пытается подключится PHP скрипт довольно прост: 1) кликаем по какой-нибудь ссылке в админ панели престапопа; 2) и в это же время в консоли вбиваем "netstat -p|grep php"

$ netstat -p|grep php
tcp        0      0 localhost:48424      \\
    webcron.prestashop.com:http ESTABLISHED 25061/php-cgi
unix  3      [ ]         STREAM     CONNECTED     1675966 25061/php-cgi
unix  3      [ ]         STREAM     CONNECTED     1675644 25061/php-cgi       /dev/shm/fcgid/23903.11

Видим, что процесс с PID 25061 полез к хосту webcron.prestashop.com, и до тех пор, пока браузер висел ожидая ответа, в netstat-е висела инфа об установленном соединении с webcron.prestashop.com.

Да, но ведь соединение с webcron.prestashop.com как-бы установлено "ESTABLISHED" - тогда почему висим!? А хир его знает!

При обращении к фронт-части PrestaShop никаких попыток соединения с удалёнными хостами не предпринималось, а вот при обращениях к любой из страниц бакэнд-части PrestaShop постоянно делался запрос к webcron.prestashop.com.

Из присутствия в названии хоста слова "webcron" примерно стало ясно, что вероятным виновником является модуль типа "cron". Но отобразив список установленных и включённых модулей никакого "cron-а" там не обнаружилось. Далее отобразили список установленных но не включённых модулей, среди которых был "Менеджер заданий cron v1.4.0 - от PrestaShop" - ок, "но какого хера ведь он же отключен" подумал я.

Открыв настройки отключённого модуля "Менеджер заданий cron v1.4.0 - от PrestaShop" в верхней части экрана выпала прямоугольная шняга с надписью на красном фоне "Ошибка! An error occurred while trying to contact PrestaShop's cron tasks webservice.", - ну, вот, добрый вечер, я тебя и нашел!:)

keyboard-break-on-head.jpg "Но какого хера ведь он же сука отключен", снова подумал я, однако долго не раздумывая удалил его нахрен, и, - оОо чудо, Аллилуйя, админка снова заработала как положено. Видимо webcron.prestashop.com как-то там покосило, подключение в хосту было и через браузер, но что-то таки было там не так...

Если это кому-то не помогло, например на сервере таки запрещены исходящие, а ведь движок по мимо прочего ещё и проверяет наличие обновлений для модулей, то идём в "Администрирование / Настройки" где отключаем "Автоматически проверять обновления модулей" - проверить наличие обновлений можно и ручками со страницы "Модули и Сервисы" нажав "Проверить обновления".

Проверить есть ли с хоста доступ в мир можно из PHP скрипта:

<?php 
if (!$sock = @fsockopen('webcron.prestashop.com', 80, $num, $error, 5)) {
    echo 'NO fsockopen webcron.prestashop.com' . PHP_EOL;
} else {
    echo 'OK fsockopen webcron.prestashop.com' . PHP_EOL;
}
 
$ip = gethostbyname('www.google.com');
if($ip != 'www.google.com') {
    //connected!
    echo 'OK gethostbyname www.google.com' . PHP_EOL;
} else {
    echo 'NO gethostbyname www.google.com' . PHP_EOL;
}

Хотя, как видим, из вышеупомянутого, наличие доступа к миру с хоста не гарантирует отсутствие тормозов! Коннектом к удалённым серверам могут грешить и платные темы для движка, например если установить платную тему и не ввести в настройках темы так званый код активации, то фронтенд может хоть и открываться, но жутко при этом будет тормозить.


Нет комментариев

Вы можете стать первым, кто добавит комментарий к этой записи.

Добавить комментарий

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Комментарии в блоге
Новое на форуме