Как будешь искать причины падения сервиса, работающего на запись

«Как будешь искать причины падения сервиса, работающего на запись» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Логирование ошибок – проверяю логи PHP (error_log, syslog) и веб-сервера (Nginx/Apache) на наличие фатальных ошибок, предупреждений или таймаутов.
  2. Мониторинг ресурсов – смотрю нагрузку на CPU, память, дисковую подсистему (особенно I/O wait). Возможно, сервер упёрся в лимиты.
  3. Блокировки БД – анализирую slow-логи и активные транзакции (SHOW PROCESSLIST в MySQL). Долгие запросы могут блокировать запись.
  4. Квота диска – проверяю свободное место (df -h) и inodes (df -i). Переполнение – частая причина падений.
  5. Пример кода с deadlock:
// Проблемный код: две транзакции пытаются обновить одни строки
$pdo->beginTransaction();
$stmt = $pdo->prepare("UPDATE users SET balance = balance - 100 WHERE id = 1");
$stmt->execute(); // Блокировка строки
// Другая транзакция в это время тоже пытается обновить id=1 → deadlock
  1. Проверяю файловые разрешения – если сервис пишет в файлы, права на запись (chmod/chown) должны быть корректны.