Ошибки 500 и 502 - где искать причину и чем они отличаются
Сайт отдаёт 500, 502 или белый экран. Разбираем причины в порядке убывания частоты - коды говорят о разном.
С чего начать
Смотрим, какой код и от кого приходит:
curl -sI https://example.com/ | head -3tail -50 /var/log/nginx/error.log # 502 и 504 пишутся здесьtail -50 /var/log/php-fpm/error.log # 500 и фатальные ошибки - здесьcurl -s https://example.com/ | wc -c # пустое тело при коде 200 - другой разборКоды приходят от разных участников. Пятисотая - от самого приложения, 502 и 504 - от веб-сервера, который не дождался ответа от PHP. Это разные журналы и разные причины, и путать их - терять время.
Включаем показ ошибок на время разбора:
// /bitrix/.settings.php: только на тестовом сайте или под своим адресом'exception_handling' => ['value' => [ 'debug' => true, 'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_DEPRECATED,]],Белый экран - это фатальная ошибка при выключенном выводе. Текст её всегда есть в журнале PHP, а показ на экране нужен лишь тогда, когда до журнала не добраться.
Смотрим, что происходило в момент сбоя:
# память, время и убитые процессы: три обычные причины обрываgrep -iE 'memory|timeout|killed' /var/log/php-fpm/error.log | tail -10dmesg | grep -i 'killed process' | tail -5grep -c '502' /var/log/nginx/access.log# всплеск в час пик - нехватка процессов, одиночные - конкретный запросss -x | grep -c php-fpm# отдельная частая причина такой картины - остановленная служба базы данныхЕдиничная ошибка и постоянная - разные истории. Всплеск 502 в час пик означает нехватку процессов, а одиночная - конкретный тяжёлый запрос, который стоит найти по журналу медленных запросов.
Причины
-
Фатальная ошибка в коде примерно 30% случаев
ПризнакСтабильная 500 или белый экран на одних и тех же страницах.
ПроверкаЧитаем журнал PHP: там есть файл и строка, где всё оборвалось.
Что делатьПравим свой код или отключаем стороннее решение, вызвавшее ошибку; после обновлений это самая частая причина.
-
Процессам PHP не хватает памяти примерно 25% случаев
ПризнакОшибка появляется под нагрузкой и исчезает ночью.
ПроверкаИщем в журналах сообщения о превышении памяти и записи ядра об убитых процессах.
Что делатьПоднимаем предел памяти пулу и уменьшаем число процессов до влезающего в оперативную память.
-
PHP не отвечает вовремя примерно 20% случаев
ПризнакКод 504 на тяжёлых страницах или во время обмена с учётной системой.
ПроверкаСверяем время ожидания в веб-сервере с временем выполнения в PHP.
Что делатьПоднимаем оба предела согласованно, а долгие операции уводим в фон - в агенты и очереди.
-
Служба PHP не запущена или перезапускается примерно 15% случаев
ПризнакКод 502 на всех страницах сразу, включая статические разделы сайта.
ПроверкаСмотрим состояние службы процессов PHP и сокет, в который стучится веб-сервер.
Что делатьЗапускаем службу и разбираем причину падения по её журналу: чаще всего это ошибка в конфигурации пула.
-
Кончилось место на диске примерно 10% случаев
ПризнакОшибки появились разом, сайт не пишет ни кэш, ни журналы.
ПроверкаСмотрим свободное место на разделах с сайтом, базой и журналами.
Что делатьЧистим журналы, старые резервные копии и кэш; журналы после этого настраивают на ротацию.
Частые вопросы
Чем 500 отличается от 502?
Пятисотую отдаёт приложение, столкнувшись с ошибкой. Пятьсот вторую - веб-сервер, не получивший ответа от PHP: приложение до неё могло вообще не дойти.
Почему на экране пусто вместо текста ошибки?
Вывод ошибок выключен, как и положено на боевом сайте. Текст при этом пишется в журнал PHP и никуда не пропадает.
Ошибка появляется только в час пик - что смотреть?
Память и число процессов: под нагрузкой сайт упирается в пределы, которых хватает при одном посетителе. Журнал медленных запросов покажет, какие страницы тяжелее прочих.
Стоит ли включать показ ошибок на боевом сайте?
Нет: тексты ошибок раскрывают пути и структуру кода. На время разбора его включают точечно и сразу выключают обратно.
Смежное
- Журналы сервера: где лежат, что смотреть, ротация - где искать запись про упавший обработчик
- Ошибки сервера и базы данных - оглавление подтемы
- Белая страница вместо сайта: разбор причин - когда код ответа успешный, а тело пустое
- nginx и PHP-FPM: статика, пулы, медленные ответы - откуда берутся пределы
- Ошибка после обновления PHP - ошибки совместимости кода
- Call to undefined function: причины по убыванию частоты - частая причина фатальной ошибки в коде
- Allowed memory size exhausted: причины по убыванию частоты - когда падение объясняется памятью
- Сервер и поиск - устройство сервера целиком
- Мониторинг сервера: что смотреть до того, как сайт упадёт - предупредить вместо разбора
- Сайт не поднялся после перезагрузки - когда не отвечает вообще ничего
- Отладка на боевом сайте: журналы, режим ошибок, поиск виновника - порядок разбора на работающем сайте
- Сайт не подключается к базе: причины по убыванию частоты - частая причина белого экрана
- Доступ запрещён и код 403: кто отдал отказ - когда сервер отвечает отказом, а не ошибкой
- Ошибка сайта изнутри: слои, коды, журналы - кто именно отдаёт каждый код
- Файл .htaccess на платформе: что работает, что ломает - если ошибку дала директива в файле