한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L11 Диск

Диск заполнен Disk full

ID причины dk-full · Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда инфраструктуры · Инфраструктура БД, Команда разработки · Разработка сервера

Открыть карточку в основной версии с иллюстрациями и экспериментами →

Когда логи и дампы заполняют диск, запись завершается ошибкой, и если к этому не подготовиться, сервер падает.

Почему Логи, дампы и временные файлы заполняют диск на 100% → Следствие Запись не удаётся. Без обработки ошибок сервер падает, с обработкой не проходят сохранения → На экране Дисконнект, роллбэк прогресса

Симптомы
Дисконнект, Съеденные действия / роллбэк
Факторы
Остановка
У кого
Весь сервер
Когда
Чем дольше без перезапуска
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда инфраструктуры · Инфраструктура БД, Команда разработки · Разработка сервера
Команда разработки: задачи
Обрабатывать ошибки записи: повторять сохранение и поднимать алерт вместо падения сервера, сократить ненужные логи и дампы.
Команда инфраструктуры: задачи
Серверы и ОС: ротация логов, алерты на заполнение, раздельные диски для логов и данных. Серверы БД: следить, чтобы журнал транзакций БД (WAL, binlog) не копился из-за остановки репликации или пропущенного бэкапа журнала.
На графике
Плавный рост · заполненность диска
Где смотреть
Смотреть заполненность в df -h и заполненность inode в df -i, искать ошибки ENOSPC в логах сервера и БД. Для БД смотреть слоты, у которых active равно false, в pg_replication_slots (PostgreSQL), число и размер файлов в SHOW BINARY LOGS (MySQL), log_reuse_wait_desc в sys.databases (SQL Server), FreeStorageSpace (RDS)
Подтверждает
Заполненность несколько дней стабильно растёт, момент достижения 100% совпадает с падением сервера или сбоями сохранения, в логах есть ENOSPC
Опровергает
Если места достаточно, а запись не проходит, причина другая: права доступа, лимит размера файла и т. п.
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
Журнал транзакций БД (WAL, binlog и др.) не удаляется и продолжает расти, если реплика остановилась или бэкап журнала не выполнился. Когда этот диск заполняется, в БД останавливаются все записи, и сохранения и обмены разом перестают проходить.

Источники

  1. write(2) — Linux manual page Linux man-pages
    Если на устройстве нет места, запись завершается ошибкой ENOSPC
  2. Monitoring Disk Usage (PostgreSQL Documentation) PostgreSQL
    Когда диск WAL заполняется, сервер БД может аварийно завершиться с PANIC
  3. Log-Shipping Standby Servers (PostgreSQL Documentation) PostgreSQL
    Слот репликации не даёт удалять WAL, пока реплика его не получит, и может заполнить место под pg_wal (ограничивается max_slot_wal_keep_size)
  4. Troubleshoot a full transaction log (SQL Server Error 9002) Microsoft SQL Server
    Когда журнал заполнен, БД доступна только для чтения, изменять данные нельзя. Частые причины, которые мешают очистке журнала: пропущенный бэкап журнала, отставание репликации, длинные транзакции. Что именно мешает, показывает log_reuse_wait_desc в sys.databases
  5. df(1) — Linux manual page coreutils
    Занятое место по файловым системам, -i показывает использование inode вместо блоков
  6. pg_replication_slots (PostgreSQL Documentation) PostgreSQL
    active: идёт ли сейчас стриминг через слот, wal_status: превысил ли удерживаемый слотом WAL значение max_wal_size
  7. SHOW BINARY LOGS Statement MySQL
    Список файлов бинарного лога сервера и их размеры (File_size)
  8. Amazon CloudWatch metrics for Amazon RDS AWS
    FreeStorageSpace: оставшееся место в хранилище инстанса БД

Смотрите также

Тот же слой: L11 Диск

Причины с тем же симптомом (Дисконнект) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами