Анатомия игровых лагов › Поиск по симптомам
Дисконнект: причины (51) и ответственные
Иначе говорят: выкидывает из игры, обрыв соединения, «Соединение с сервером потеряно»
Открыть в каталоге симптомов с иллюстрациями →
Посреди игры соединение рвётся, и игрока возвращает на экран входа или в окно переподключения.
Фриз на несколько секунд, затем сообщение «Соединение потеряно». Если выкидывает сразу многих, проблема на стороне сервера.
За время таймаута не пришло ни одного пакета. Проверьте долгие обрывы связи, таймаут простоя, падение или перезапуск сервера, сервер или ПК игрока, который стоял дольше таймаута (долгая загрузка). Если игра просто закрылась без сообщения, сначала проверьте аварийное завершение клиента (краш, нехватка памяти), а соединение потом.
Причины этого симптома
L1 Процесс игрового клиента
- Утечка памяти на клиенте: Чем дольше работает игра, тем больше памяти она занимает, всё сильнее тормозит и в итоге принудительно закрывается. (Команда разработки · Разработка клиента)
- Краш клиента: Игра закрывается из-за необработанной ошибки. Игроку это кажется дисконнектом, хотя сервер работает нормально. (Команда разработки · Разработка клиента)
- Проверки модуля защиты игры (античита): Модуль защиты от взлома работает вместе с игрой и периодически выполняет проверки. Если проверка тяжёлая или хартбит (периодический сигнал «я жив») с сервером защиты запаздывает, появляются микрофризы или дисконнект. (Команда разработки · Разработка клиента)
L2 ОС и устройство клиента
- Сворачивание мобильного приложения в фон: Если ненадолго свернуть игру, чтобы посмотреть уведомление, через несколько секунд ОС приостанавливает приложение (suspend), а сервер тем временем отключает игрока. (Команда разработки · Разработка клиента)
- Переключение Wi-Fi ↔ LTE/5G: Когда игрок выходит из дома, Wi-Fi пропадает и устройство переключается на LTE или 5G. IP-адрес меняется, и старое соединение перестаёт работать. (Команда разработки · Разработка сервера)
- Ограничение обработки в свёрнутом или неактивном окне: Когда игрок переключается на другое окно или сворачивает игру, и сама игра, и Windows ради экономии энергии замедляют её работу. По возвращении накопившиеся пакеты приходят разом, или соединение уже оборвано. (Команда разработки · Разработка клиента)
- Вмешательство оверлеев: Мессенджеры, лаунчеры, программы записи и счётчики FPS встраиваются в рендеринг игры (хукинг), чтобы рисовать свой UI поверх игровой картинки. Работы в каждом кадре становится больше, а иногда оверлей конфликтует с игрой, и она дёргается или принудительно закрывается. (Внешние стороны · Внешние стороны)
L3 Домашняя сеть
- Истечение записи в таблице NAT: Роутер удаляет из таблицы NAT неактивные соединения, по которым какое-то время не было пакетов. Это частая причина дисконнекта в тот момент, когда игрок после простоя снова начинает двигаться. (Команда разработки · Разработка клиента)
- Слабый или перегретый роутер: Когда на дешёвый роутер приходятся десятки устройств и тысячи соединений, он сам перестаёт справляться. (Внешние стороны · Внешние стороны)
- Хендовер между базовыми станциями (в движении): В автобусе или метро связь прерывается на время смены базовой станции. (Внешние стороны · Внешние стороны)
- Слабый сигнал мобильной сети и мёртвые зоны: В лифте, под землёй или в глубине здания растёт число повторных передач, падает скорость, и в итоге дело доходит до дисконнекта. (Внешние стороны · Внешние стороны)
L4 Интернет-маршрут
- Ограничение UDP и DPI на уровне страны или провайдера: Некоторые сети блокируют отдельные UDP-адреса и порты или ограничивают скорость UDP, а оборудование инспекции пакетов (DPI) отсеивает протоколы, которые не может распознать. Игры, работающие по UDP, в таких сетях не подключаются или часто теряют соединение. (Внешние стороны · Внешние стороны)
- Плохое качество линии связи: Плохой контакт в разъёмах, старый кабель или неисправный модем дают постоянные потери и периодические обрывы связи. (Внешние стороны · Внешние стороны)
- Перегрузка общих линий из-за DDoS: Массированная атака на игровую компанию или на другого клиента в той же сети забивает общие линии связи. (Команда инфраструктуры · Сетевая инфраструктура)
- Общий IP провайдера (CGNAT): В мобильных сетях и у некоторых провайдеров один IP делят много абонентов, а записи NAT для неактивных соединений быстро удаляются. (Команда разработки · Разработка клиента)
L5 Сетевое оборудование ЦОД
- Переполнение таблицы сессий файрвола: Файрвол записывает каждое пропущенное соединение в таблицу сессий и отслеживает его. Когда таблица заполнена, новые соединения принять нельзя. (Команда инфраструктуры · Сетевая инфраструктура)
- Таймаут простоя балансировщика: Балансировщик нагрузки удаляет неактивное соединение через определённое время. Игра считает, что соединение живо, и в итоге получает дисконнект. (Команда инфраструктуры · Сетевая инфраструктура)
- Истечение отслеживания соединений в облачной группе безопасности: Файрвол облачного сервера (группа безопасности) тоже отслеживает соединения, и запись о неактивном соединении истекает через заданное время. Поэтому даже на сервере, к которому подключаются напрямую без балансировщика, игрок после бездействия может получить дисконнект. (Команда инфраструктуры · Серверная инфраструктура)
- Переключение сетевого оборудования на резерв (failover): Когда маршрутизатор или файрвол выходит из строя и трафик переключается на резервное устройство (failover), на эти несколько секунд у всех фриз. (Команда инфраструктуры · Сетевая инфраструктура)
- Несовпадение MTU (пропадают только большие пакеты): Если на промежуточном участке MTU (максимальный размер пакета за одну передачу) меньше, а уведомления о превышении размера блокируются, постоянно пропадают только большие пакеты. (Команда инфраструктуры · Сетевая инфраструктура)
L6 Сетевая карта сервера
- Обслуживание облачного хоста и живая миграция: Во время обслуживания физического сервера (хоста) облачный провайдер переносит виртуальную машину на другой хост (живая миграция) или ненадолго её приостанавливает. На это время замирает весь сервер, а если пауза долгая, соединения рвутся. (Команда инфраструктуры · Серверная инфраструктура)
- Проблемы драйвера и прошивки NIC: Из-за ошибки драйвера или сбоя какой-то функции карта зависает и перезапускается, и на это время весь приём и отправка прекращаются. (Команда инфраструктуры · Серверная инфраструктура)
L7 ОС сервера (ядро)
- OOM killer: Когда память заканчивается, Linux выбирает процесс, который занимает больше всего памяти, и принудительно его завершает. Обычно это игровой сервер. (Команда разработки · Разработка сервера)
- Скачок системных часов (шаговая коррекция NTP): Если часы сервера разом переводятся на несколько секунд вперёд или назад, таймеры, завязанные на системные часы, срабатывают пачкой или замирают. (Команда разработки · Разработка сервера)
L8 Сокеты и протоколы
- TCP RTO и экспоненциальный backoff: С каждой новой неудачной повторной передачей ожидание удваивается, и короткий обрыв связи превращается в долгую остановку. (Команда разработки · Разработка сервера)
- Политика для медленных клиентов (slow consumer): Если для клиента постоянно копятся неотправленные данные, сервер выбрасывает устаревшие обновления или разрывает соединение. (Команда разработки · Разработка сервера)
- Потеря последних данных при принудительном закрытии через RST: Если сервер резко рвёт соединение, последнее отправленное сообщение или подтверждение сохранения пропадает. (Команда разработки · Разработка сервера)
- Перекос распределения в SO_REUSEPORT: Когда несколько процессов принимают трафик на одном порту, ядро закрепляет каждое подключение за процессом по хешу адреса и больше его не меняет. Если один процесс зависает, ждут только игроки, закреплённые за ним. (Команда разработки · Разработка сервера)
- Ошибка WSAECONNRESET на UDP-сокете в Windows: Когда сервер на Windows отправляет UDP уже ушедшему клиенту, обратно приходит уведомление «порт недоступен» (ICMP). Из-за него следующий вызов приёма завершается ошибкой, и если код сервера считает её поломкой самого сокета, страдают все, кто работает через этот сокет. (Команда разработки · Разработка сервера)
L9 Процесс игрового сервера
- Дедлок: Если два потока ждут блокировки, захваченные друг другом, они встают навсегда. (Команда разработки · Разработка сервера)
- Падение сервера: Если процесс сервера падает из-за необработанной ошибки, у всех, кто был на этом сервере, одновременно обрывается соединение. (Команда разработки · Разработка сервера)
- Бесконечный цикл и неконтролируемая логика: Если из-за бага тик не заканчивается, сервер встаёт, и watchdog принудительно его перезапускает. (Команда разработки · Разработка сервера)
L10 Память
- Утечка памяти: Неосвобождённая память понемногу накапливается, и через несколько дней это заканчивается трешингом GC, свопом или принудительным завершением процесса. (Команда разработки · Разработка сервера)
- Трешинг GC (мало свободного места в куче): Когда живые данные приближаются к пределу кучи, GC почти нечего освобождать, и сборки идут одна за другой без перерыва. (Команда разработки · Разработка сервера)
- Фрагментация памяти: Когда из-за постоянных выделений и освобождений свободное место дробится на мелкие куски, процесс занимает намного больше памяти, чем реально использует. (Команда разработки · Разработка сервера)
L11 Диск
- Диск заполнен: Когда логи и дампы заполняют диск, запись завершается ошибкой, и если к этому не подготовиться, сервер падает. (Команда инфраструктуры · Серверная инфраструктура)
L12 База данных
- Переключение БД на резерв: Пока после отказа основной БД идёт переключение на резервную, запись невозможна, а последние данные, которые не успели реплицироваться, могут пропасть. (Команда инфраструктуры · Инфраструктура БД)
L13 Архитектура и эксплуатация серверов
- Трафик через шлюз или прокси: Если поставить между клиентом и игровым сервером промежуточный сервер, каждый проход через него добавляет время обработки, а сам он становится единой точкой отказа. (Команда разработки · Разработка сервера)
- Переход между зонами (передача на другой сервер): При входе в другую локацию или данж данные персонажа передаются на другой сервер, и на этом этапе возникают задержки и сбои. (Команда разработки · Разработка сервера)
- Деплой и перезапуск: Если при перезапуске сервера ради обновления не перенести соединения, у всех игроков на этом сервере будет дисконнект, а сохранения перед остановкой и переподключения придут разом. (Команда разработки · Разработка сервера)
- Лимит очереди на вход и короткое окно переподключения: Когда сразу после релиза или техработ идёт наплыв подключений, очередь на вход упирается в лимит и перестаёт принимать новых игроков, а тот, кто уже ждал, при коротком обрыве теряет место и снова оказывается в конце очереди. (Команда разработки · Разработка сервера)
Архитектура синхронизации
- Архитектура с хостом-игроком: Если сервером служит ПК одного из игроков, его подключение и производительность ПК определяют ощущения всех. (Команда разработки · Разработка сервера)
Проблемы только у части игроков
- Ложные срабатывания проверок у абонентов одного провайдера: У игроков на подключениях с большим джиттером ввод приходит пачками и часто попадает под серверную проверку скорости и кулдаунов. (Команда разработки · Разработка сервера)
- Конфликт фиксированного UDP-порта: Если клиент рассчитан на конкретный локальный порт, второй клиент на том же ПК не может занять порт или делит пакеты с первым. (Команда разработки · Разработка клиента)
- Ошибка разделения сессий по IP или устройству: Если сервер или промежуточный сервер различает соединения по IP или ID устройства, два клиента на одном ПК (с одним публичным IP) считаются одним игроком. (Команда разработки · Разработка сервера)
- Ограничение на несколько клиентов: Если модуль защиты или политика сервера ограничивает число клиентов на одном ПК, второй клиент не запускается или не подключается, либо у первого случается дисконнект. Некоторые игры блокируют только функции дополнительного клиента. (Команда разработки · Разработка клиента)
- Ограничение обработки в фоновом окне: Для клиента в фоновом окне игра, движок и ОС снижают частоту кадров и объём обработки. Полученные пакеты не успевают обрабатываться, копятся и переполняют буфер. (Команда разработки · Разработка клиента)
Первопричины повторных передач TCP
- Отбрасывание пакетов файрволом или conntrack: Файрвол или conntrack в Linux (функция, которая записывает проходящие соединения в таблицу) выбрасывает пакеты, если таблица заполнена или состояние соединения кажется ему неверным. (Команда инфраструктуры · Сетевая инфраструктура)
- Перегрузка промежуточного оборудования (файрвол, IPS, защита от DDoS): Файрволы, системы предотвращения вторжений (IPS) и оборудование защиты от DDoS проверяют каждый проходящий пакет. Как только поток превышает их возможности, необработанные пакеты выбрасываются. (Команда инфраструктуры · Сетевая инфраструктура)
- Чёрная дыра MTU (большие пакеты теряются раз за разом): Если на промежуточном участке допустимый размер пакета уменьшился, а уведомление «слишком большой» (ICMP) блокируется, большие пакеты пропадают, сколько бы раз их ни отправляли повторно. (Команда инфраструктуры · Сетевая инфраструктура)
- Истечение записи NAT или балансировщика посреди соединения: Если промежуточное оборудование удаляет запись неактивного соединения (запись о том, куда пересылать это соединение), следующий отправленный пакет не доходит. Повторные передачи идут, пока соединение не оборвётся, или оборудование возвращает отказ в соединении (RST), и связь рвётся сразу. (Команда разработки · Разработка клиента)
Каталог симптомов с иллюстрациями