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

Анатомия игровых лагов › L9 Процесс игрового сервера

Затор в очереди сообщений Mailbox / job queue backlog

ID причины sp-queue · Основной ответственный Команда разработки · Разработка сервера

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

Если запросы поступают быстрее, чем обрабатываются, и копятся в очереди, запросы в её хвосте обрабатываются лишь через несколько секунд или выбрасываются.

Почему Запросы приходят быстрее, чем обрабатываются → Следствие Очередь растёт, а при превышении лимита запросы выбрасываются → На экране Умения и обмены срабатывают с опозданием или «съедаются»

Симптомы
Задержка ввода, Съеденные действия / роллбэк
Факторы
Задержка, Потери
У кого
Одна локация или канал, Только одна функция
Когда
При наплыве игроков
Ответственные
Основной ответственный Команда разработки · Разработка сервера
Команда разработки: задачи
Мониторить длину очереди, ввести политику, при которой в первую очередь выбрасываются устаревшие запросы, распараллелить обработку.
На графике
Упор в лимит (плато) · длина очереди и возраст самого старого сообщения, число обработанных в секунду
Где смотреть
Смотреть метрики сервера по каждой очереди: длину, возраст самого старого сообщения, число поступивших, обработанных и выброшенных в секунду. Если метрик в коде нет, смотреть через ss (или netstat) Recv-Q игрового сокета (объём, который ядро уже приняло, а процесс ещё не прочитал)
Подтверждает
Пока поступает больше, чем обрабатывается, число обработанных упирается в одно значение и дальше не растёт, а длина и возраст очереди и число выброшенных постоянно растут
Опровергает
Если очередь короткая и сообщения в ней свежие, а отклик всё равно запаздывает, дело в задержке на линии или в запаздывании самих тиков
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Реальные инциденты
CCP Games 2014: EVE Online: перегрузка сервера во время масштабной битвы флотов в HED-GP

Источники

  1. Avoiding insurmountable queue backlogs AWS
    Amazon Builders' Library. Затор отслеживают по возрасту ожидающих сообщений. Системы реального времени обрабатывают сначала свежие данные (ближе к LIFO), а устаревшие сообщения могут выбрасывать
  2. Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
    Если запросы приходят быстрее, чем обрабатываются, очередь заполняется и задержка растёт. Вместо FIFO применяют LIFO или CoDel и сбрасывают старые запросы, которые уже никому не нужны
  3. ss(8) — Linux manual page iproute2
    Утилита для просмотра статистики сокетов (сведения похожи на netstat). -p показывает процесс, который использует сокет
  4. netstat(8) — Linux manual page net-tools
    Recv-Q: число байтов в подключённом сокете, которые программа пользователя ещё не забрала

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

Тот же слой: L9 Процесс игрового сервера

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

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