Главная / База знаний / Технические проблемы / 500 ошибка периодически: как локализовать
База знаний

500 ошибка периодически: как локализовать

Сервер иногда отдаёт 500 — нагрузка, БД, плагины. Как найти причину через логи.

Технические проблемы · 3 мин чтения

Симптом

Причина

  1. Перегрузка сервера – слишком много запросов, недостаточно ресурсов (CPU, RAM).
  2. Проблемы с базой данных – таймауты, deadlock, переполнение соединений.
  3. Ошибки в коде – необработанные исключения, неверные пути к файлам, неправильные настройки.
  4. Недостаток памяти – скрипт превышает лимит memory_limit (PHP) или max_memory (Python).
  5. Неправильные права доступа – скрипт не может открыть нужный файл/директорию.
  6. Проблемы с внешними сервисами – API‑запросы падают, таймауты.
  7. Конфигурационные ошибки – неверные директивы в nginx.conf, httpd.conf, .htaccess.

Как проверить

Шаг Что сделать Команда / пример
1 Проверить статус 500 в логах веб‑сервера tail -n 200 /var/log/nginx/error.log
2 Найти причину в логах приложения grep -i "error" /var/log/php-fpm/www-error.log
3 Проверить нагрузку на сервер top -b -n 1 или htop
4 Проверить лимиты памяти и памяти процесса ps aux | grep php
5 Проверить соединения к БД mysqladmin processlist (MySQL) или pg_stat_activity (PostgreSQL)
6 Проверить таймауты в конфигурации grep -i "timeout" /etc/php/7.4/fpm/php.ini
7 Проверить права доступа к файлам ls -l /var/www/html/
8 Проверить внешние сервисы curl -I https://api.example.com/health
9 Включить режим отладки (если возможно) export APP_DEBUG=1 (Laravel, Django и т.д.)

Решение

1. Устранение перегрузки

worker_processes auto;
worker_connections 10240;
location / {
    proxy_cache my_cache;
    proxy_pass http://backend;
}

2. Оптимизация работы с БД

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

3. Исправление кода

try {
    // код
} catch (Exception $e) {
    error_log($e->getMessage());
    http_response_code(500);
    echo "Internal Server Error";
}
chmod 644 /var/www/html/config.php
chown www-data:www-data /var/www/html
memory_limit = 256M

4. Настройка таймаутов

max_execution_time = 60
default_socket_timeout = 60
proxy_read_timeout 120;
proxy_connect_timeout 60;

5. Проверка внешних сервисов

import requests, time

def get_data(url, retries=3):
    for i in range(retries):
        try:
            resp = requests.get(url, timeout=5)
            resp.raise_for_status()
            return resp.json()
        except requests.RequestException:
            time.sleep(2)
    raise RuntimeError("API unavailable")

6. Перезапуск сервисов

После внесения изменений перезапустите веб‑сервер и PHP‑файпм:

sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm

Связанные

SEO КП · нужна помощь?

Не хотите разбираться сами?

Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.

Запустить аудит за 199 ₽ Узнать про продвижение →