Сегодня я расскажу об одной достаточно редко встречающейся, однако зачастую «трудной» в определении ошибке, возникающей в процессе работы сайтов, созданных на основе CMS OpenCart.

Иногда после закачки сайта на хостинг он работает какое-то (зачастую продолжительное) время, после чего частями начинает отдавать ошибку 500 «Internal Server Error». например, вот так:

Внезапно возникшая ошибка 500 в админ-панели OpenCart

Внезапно возникшая ошибка 500 в админ-панели OpenCart

Кроме того та же ошибка начинает возникать как в некоторых местах страницы, так и на отдельных страницах целиком!

Ещё одним «симптомом» является то, что восстановление файлов сайта из бекапа временно устраняет ошибку (чем более давний бекап взят — тем дольше работает сайт)

При этом в логах сервера нет ничего вразумительного о том,  какой именно файл или событие  послужили причиной ошибок, а в error-логе есть только записи вида:

12:08:51 (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
12:08:51 (104)Connection reset by peer: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function
12:05:22 (104)Connection reset by peer: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function
12:05:22 (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
12:04:09 (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
12:04:09 (104)Connection reset by peer: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function

Иногда (зависит от используемой на сервере ОС и его настроек), ошибка в логах может выглядеть немного более информативно:

[Thu Nov 12 08:12:32 2013] [warn] mod_fcgid: read data timeout in 30 seconds
[Thu Nov 12 08:12:32 2013] [warn] (60)Operation timed out: mod_fcgid: ap_pass_brigade failed in handle_request function

В обоих случаях суть сводится к тому, что некий скрипт после запуска не может вовремя отдать нужные данные  (возможно, уходя в вечный цикл, или зависая по причине отсутствия доступа к нужному ресурсу), а попросту говоря — «зависает» на время свыше разрешенного на сервере переменной max_execution_time, после чего принудительно завершается, так сказать не взирая ни на что.

Из всего вышесказанного можно сделать вывод, что с течением времени либо в какой-то папке  катастрофически увеличивается количество файлов (маловероятно, так как обычно они обрабатываются по одному или группами спецскриптами, и в случае проблем виновника зачастую  «видно» в логе), либо же до неимоверных размеров (сотни и тысячи мегабайт) разрастается какой-то один файл, и скрипт пытаясь получить к нему доступ просто виснет. Чаще всего такое бывает с файлами логов (файлы с расширением .log).

Выявить виновника в таких случаях достаточно просто. Для этого нужно сравнить объём файлов из рабочего бекапа и файлы сайта с ошибкой.

В случае с OpenCart очень часто «виновником торжества» является лог-файл  модуля vQmod, расположенный в папке корневая_папка_сайта/vqmod/vqmod.log

Устранение проблемы.

Устранить ошибку можно двумя путями.

Первый путь. Периодически просто удалять файл  vqmod.log и создавать на его месте такой же но пустой.

Второй путь. Обновить vQmod с сайта разработчика. По их словам в последних версиях мода подобной ошибки нет, так как логи очищаются каждые 7 дней автоматически. Скачать новую версию можно тут: https://code.google.com/p/vqmod/downloads/list