При обращении к сайту можно видеть 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-ой ошибкой. Причины у них могут быть общие и установить их, как правило, позволяет анализ лога веб-сервера.