Ошибка 503 Apache и как ее исправить

При обращении к сайту можно видеть 503 Service Temporarily Unavailable.  Чтобы понять как исправить ошибку 503 прежде всего нужно проанализировать логи доступа и логи ошибок веб-сервера.

Также часто причины заключаются в закончившемся пространстве на диске сервера или в слишком большой нагрузке вызываемой некорректной работой какой-либо службы. Рассмотрим основную причину и то, как ее устранить (для конфигурации с Apache модулем fastcgi).

 

Как исправить ошибку 503

В логах Apache часто можно обнаружить сообщения из которых следует, что достигается установленный лимит процессов PHP.

 

less /var/log/apache2/error.log

[Mon Mar 05 11:13:25 2018] [warn] [client 40.77.387.85] mod_fcgid: can't apply process slot for /usr/lib/cgi-bin/php
[Mon Mar 05 11:14:19 2018] [warn] [client 81.193.147.12] mod_fcgid: can't apply process slot for /usr/lib/cgi-bin/php, referer: https://yandex.ru/search/?text=%C2%AB%D0%A3%D1%80%D0%B0%D0%BB-%D0%9D%D0%B5%D1%84%D1%82%D1%8C-%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81&clid=2270457&banerid=0500000134:58e754588abffa001432481c&win=215

 

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

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

 

Веб-сервер периодически перезапускает существующие процессы PHP чтобы исключить утечки памяти.

Перезапуск процессов выполняется системным вызовом SIGTERM. Если процесс занят (выполнением долгого скрипта), он не отреагирует на этот сигнал и продолжит работу. Веб-сервер в этом случае пошлет процессу сигнал SIGKILL и завершит его принудительно.

Подробнее про процессы и системные вызовы.

 

 

В случае если в логах присутствуют сообщения с can't apply process slot на ситуацию можно повлиять отредактировав параметры модуля fastcgi Apache увеличив лимиты на количество процессов и количество запросов на процесс

 

mcedit /etc/apache2/mods-availible/fcgid.conf

 

Увеличивать нужно один из двух параметров (или оба из них) постепенно подбирая оптимальные значения

FcgidMaxProcessesPerClass

FcgidMaxRequestsPerProcess

 

 

После корректировки нужно перезапустить веб-сервер

/etc/init.d/apache2 restart

 

От 503 ошибок, вызванных нехваткой слотов таким образом удасться избавиться, однако не стоит забывать, что причин ошибок может быть множество.

Это может быть нехватка какого-либо системного ресурса (памяти, места ни диске или CPU) или например ожидание ответа от стороннего ресурса, к которому может обращаться код сайта и ответ от которого не может быть получен.

 

503 ошибка при обращении к сайту может чередоваться с 500-ой ошибкой. Причины у них могут быть общие и установить их, как правило, позволяет анализ лога веб-сервера.