В данном материале мы постараемся подробно описать все существующие причины возникновения ошибки 503 (Service Temporarily Unavailable) и по возможности, дать рекомендации по ее устранению.
Итак.
На сервере количество процессов-рабочих, обрабатывающих запросы пользователей, для каждого акаунта строго ограниченно. Поступающие запросы на сервер выстраиваются в очередь и в зависимости от сложности обработки могут тормозить продвижение очереди. В случае если размер очереди достигает критической отметки, то сервер перестает принимать новые запросы и возвращает сообщение о недоступности.
Основные причины возникновения ошибки 503 можно условно разделить на: зависание скриптов и превышение запросов к серверу.
Давайте сначала остановимся на ЗАВИСАНИИ СКРИПТОВ.
1. Через PHP передаются большие статичные файлы.
Для того, что бы избежать этой проблемы, следует попросту не передавать большие файлы через скрипт, а использовать прямую передачу. Причин зависания скриптов две:
а. ограниченное время работы скрипта (по истечению наступает прерывание передачи);
б. передавая файл через PHP мы запускаем еще один процесс, что приводит к тому, что он перестает участвовать в механизме обработки пользовательских запросов.
В случае же прямой передачи файлов, мы задействуем специальный многопоточный процесс - соответственно, сервер получает возможность обрабатывать множество потоков одновременно, что никак не сказывается на скорости работы сайта.
Для реализации функциональности большинства скриптов хранения файлов, можно использовать правила
mod_rewrite в .htaccess.
2. Коннект с удаленным сервером.
Настоятельно рекомендуется избегать соединения с удаленным сервером - в случае же необходимости следует настроить низкий таймаут на ожидание ответа. Помимо этого, следует удостовериться, что связь с удаленным сервером стабильна.
В случае, если в скриптах вашего движка используются Include-функции, загружающие его, то следует убедиться в том, что в них используется локальный путь, а не урл вида http://. Наличие урла вынуждает сервер совершать дополнительный запрос по HTTP, а это приводит только к тому, что сайт грузиться медленнее.
3. Наличие тяжелых или неработающих компонентов CMS.
Рекомендуется планомерно деинсталлировать все компоненты, которые вы не используете или же использование которых необязательно. Также необходимо выполнить проверку всех нужных компонентов и плагинов вашей
CMS - для этого можно отключать их по очереди и, тем самым, идентифицировать те, которые тормозят работу ресурса. Если есть альтернатива тяжелым компонентам, то следует ей воспользоваться.
4. Выполняющееся тяжело задание mambot (в случае использования CMS Joomla).
В случае, когда среди mambot присутствуют такие задания, которые с легкостью можно перенести в системный cron, то лучше всего именно это и сделать. В большинстве случаев, именно из-за mambot-заданий, которые выполняются одновременно с запросом от пользователя, загрузка сайта осуществляется чрезвычайно медленно (или же вообще ничего не происходит).
5. Емэйл рассылка.
Скрипт почтовой рассылки лучше всего располагать в cron, управление которым находится в контрольной панели. Соответственно запуск следует назначать на то время, когда нагрузка на сервер минимальна или вообще не происходит.
6. Очень частые медленные запросы к базе данных MySQL.
В случае, когда поступают медленные запросы, то в папке logs автоматически создается файл mysql-slow.log. Данные из этого файла апдейтятся раз в 24 часа и содержат только самые проблемные SQL-запросы. Решение проблемы:
Реализация кэширующих компонентов, которые могут сократить такие запросы;
Оптимизация SQL-запросов;
Индексация таблицы базы данных, которые используются в выборке, по столбцам;
Переход на более оптимальный движок.
Вот вроде бы и все варианты, касательно скриптов.
Теперь же перейдем ко второй причине возникновения ошибке 503, а именно - ПРЕВЫШЕНИЕ ЗАПРОСОВ К СЕРВЕРУ.
Чаще всего, проблема с превышением запросов, может быть решена простой оптимизацией ресурсов - допустим, если ресурс дефрагментирован или содержит огромное количество ссылок на файлы (картинки, таблицы стилей и т.п.).
Еще один вариант проблемы - на ресурс инсталлирован элемент, который посылает на сервер AJAX-запросы (к примеру, это может быть чат). Ну а, как известно, количество запросов зависит не только от количества посетителей, но и от числа открытых ими окон и вкладок.
Перегрузка запросами может происходить и от ботов, индексирующих или сканирующих сайт (поисковые боты, боты
Сапы и т.п.).
Ну и последнее - это, конечно же, использование элементов ресурсов или скриптов на сторонних сайтах (к примеру, ссылки на графику, информеры и т.п.). Проблема решается реализацией антилич-модулей и ковырянием в настройках. Вариант DDoS-атаки мы не рассматриваем.
Надеемся, наш материал был полезен начинающим сайтостроителям. Если у вас возникли какие-либо вопросы, то можете смело написать коммент - или к статье или
на наш сео-форум.
Отсюда вполне легально можно брать статьи, пожалуйста, с указанием ссылки на источник :-)
(ссылка на тематический ресурс будет и вам полезна и нам будет приятно)