Временами в панели администрирования движка PrestaShop 1.6.x наблюдаются жуткие тормоза вплоть до 2-3 мин и отключение модулей при этом не даёт совершенно никаких результатов.
"Злые люди в туалетах бьются о стульчак и корявыми руками дёргают рычаг, нет воды здесь, нету света, нет здесь ничего, ходят съёмщики как тени, а кругом темно!", о чём это я, ах да, о тормозах..., о тормозах в админке PrestaShop 1.6.x... В общем рецептов нагуглилось не так много, среди прочего:
- Перезалить файлы движка и как бы должно помочь;
- Проверить, есть ли, с машины на которой работает "престажоп", доступ к таким ресурсам как prestashop.com, api.prestashop.com, addons.prestashop.com, translations.prestashop.com - ибо при отсутствии онного тормоза как раз и возникают;
- Потключать модули статистики для админ части;
- Протереть монитор, выдернуть шнур и выдавить стекло.
Второй вариант решения проблемы с производительностью мне показался более вменяемым, но проверять смысла не видел имхо все исходящие в фаерволе были разрешены по-молчанию, хотя для успокоения души проверил наличие доступа к вышеупомянутым хостам - доступ есть.
Были предложения уменьшить значение (у нас стояло 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.", - ну, вот, добрый вечер, я тебя и нашел!:)
"Но какого хера ведь он же сука отключен", снова подумал я, однако долго не раздумывая удалил его нахрен, и, - оОо чудо, Аллилуйя, админка снова заработала как положено. Видимо 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; }
Хотя, как видим, из вышеупомянутого, наличие доступа к миру с хоста не гарантирует отсутствие тормозов! Коннектом к удалённым серверам могут грешить и платные темы для движка, например если установить платную тему и не ввести в настройках темы так званый код активации, то фронтенд может хоть и открываться, но жутко при этом будет тормозить.