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

Анатомия игровых лагов › L13 Архитектура и эксплуатация серверов

Перегрузка логирования и мониторинга Logging / monitoring overhead

ID причины in-monitoring · Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура

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

При сбое логи растут лавиной, и серверы, которые отправляют логи синхронно, из-за этого тормозят ещё сильнее.

Почему Из-за ошибок резко растёт объём логов и метрик → Следствие Сборщик логов не успевает, серверы с синхронной отправкой ждут → На экране Во время сбоя микрофризы и фризы усиливаются из-за логов

Симптомы
Микрофризы, Фриз
Факторы
Остановка
У кого
Весь сервер
Когда
При наплыве игроков, Изредка, случайно
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Отправлять асинхронно, делать сэмплирование, при переполнении буфера отбрасывать, одинаковые ошибки отправлять пачкой.
Команда инфраструктуры: задачи
Рассчитать мощность сборщика логов на всплеск объёма при сбое, настроить алерт на отставание сборщика.
На графике
Случайные всплески · объём логов, очередь сборщика логов
Где смотреть
Смотреть число строк и байтов логов в секунду на сервере, очередь и число отброшенных записей у агента сбора логов вместе с временем тика. Если есть остановившиеся потоки, проверить через bcc offcputime -p, не ждут ли они записи или отправки логов
Подтверждает
В моменты всплесков времени тика объём логов в десятки раз выше обычного, а время ожидания игрового потока сосредоточено в стеках вызовов записи и отправки логов
Опровергает
Если объём логов обычный или игровой поток не ждёт на логах, всплеск логов только следствие сбоя, и причину первой ошибки нужно искать отдельно
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)

Источники

  1. Logging in C# Microsoft
    Методы логирования в .NET синхронные, поэтому при медленном хранилище рекомендуется сначала писать в быстрое хранилище, а потом переносить
  2. Asynchronous loggers Apache Software Foundation
    Асинхронное логирование сглаживает короткие всплески очередью, но если вывод долго остаётся медленным, очередь заполняется, и скорость падает до скорости самого медленного вывода, либо логи отбрасываются по заданной политике (Discard)
  3. Demonstrations of offcputime, the Linux eBPF/bcc version IO Visor
    Суммирует по стекам вызовов время, когда поток стоял и не был на CPU (off-CPU), процесс задаётся через -p

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

Тот же слой: L13 Архитектура и эксплуатация серверов

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

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