Анатомия игровых лагов › Поиск по симптомам
Слоумо: причины (24) и ответственные
Иначе говорят: мир замедлился, всё тормозит
Открыть в каталоге симптомов с иллюстрациями →
Всё движется медленно. Применение умений и перемещение монстров выглядят растянутыми. В зависимости от устройства сервера скорость может остаться прежней, и тогда проблема проявляется как микрофризы и телепортация.
Замедляются все в одной локации. Обычно там, где собралось много игроков.
Сервер не успевает вовремя завершать тики. Линия связи в порядке, поэтому пинг, измеренный вне игры, не меняется. Внутриигровой пинг может немного вырасти, если в него входит ожидание обработки на сервере. Проверьте резкий рост онлайна, расчёт зоны видимости, рассылку, нехватку памяти.
Причины этого симптома
L1 Процесс игрового клиента
L5 Сетевое оборудование ЦОД
L7 ОС сервера (ядро)
- Избыток потоков и переключение контекста: Если потоков намного больше, чем ядер, заметная часть CPU уходит только на то, чтобы ОС запускала их по очереди. (Команда разработки · Разработка сервера)
- Троттлинг CPU в контейнере (квота CFS): Если у контейнера задан лимит CPU, то, израсходовав квоту в пределах периода (обычно 100 ms), он принудительно останавливается до конца периода (троттлинг). (Команда инфраструктуры · Серверная инфраструктура)
- Всплески задержки из-за управления питанием сервера (C-state, управление частотой): Простаивающее ядро CPU ради экономии энергии переходит в глубокое состояние сна (C-state) и снижает частоту. Когда приходит пакет или срабатывает таймер, на пробуждение и подъём частоты уходит время, и к обработке даже маленьких пакетов добавляется задержка. (Команда инфраструктуры · Серверная инфраструктура)
- Плановые задания: Сжатие логов, бэкапы и проверки безопасности, которые запускаются каждый день в одно и то же время, занимают CPU и диск. (Команда инфраструктуры · Серверная инфраструктура)
- Изменение производительности после обновления ОС, ядра, драйверов или прошивки: Игровой код не менялся, но после обновления ОС, ядра, драйверов или прошивки сервер стал работать медленнее. Обновление может поменять значения по умолчанию, планировщик, защиту от уязвимостей CPU (mitigations) и поведение драйверов. (Команда инфраструктуры · Серверная инфраструктура)
L8 Сокеты и протоколы
- Блокирующая отправка из-за медленного клиента: Если у одного игрока с медленным подключением заполнился буфер отправки, а сервер отправляет данные блокирующим способом (вызов не возвращается, пока в буфере не освободится место), поток сервера ждёт этого одного игрока. (Команда разработки · Разработка сервера)
- Архитектура с блокирующим вводом-выводом: Если поток, ожидая один сокет, не может делать ничего другого, то с ростом числа игроков тормозит всё. (Команда разработки · Разработка сервера)
L9 Процесс игрового сервера
- Превышение бюджета тика: Если работа одного тика не укладывается в бюджет, интервал тиков сервера растягивается, и вся локация идёт замедленно или с микрофризами. (Команда разработки · Разработка сервера)
- Взрывной рост расчёта видимости (AOI, N²): Если выяснять, кто кого видит, сравнивая всех со всеми, то при росте числа игроков в 10 раз расчёты растут в 100 раз. (Команда разработки · Разработка сервера)
- Перегрузка однопоточной локации (хотспот): Если каждую локацию обслуживает один поток, то при скоплении игроков в одном месте на 100% загружается только одно ядро. (Команда разработки · Разработка сервера)
- Лавина поиска пути: Когда сотни монстров одновременно гонятся за игроками и рассчитывают путь, это сильно нагружает CPU. (Команда разработки · Разработка сервера)
- Бой, сосредоточенный на одной цели (мировой босс): Когда сотни игроков одновременно бьют одного босса, все расчёты по этому боссу сходятся в одной точке, а информация о каждом ударе рассылается всем, кто его видит. (Команда разработки · Разработка сервера)
- Накопление объектов (неубранные предметы и призванные существа): Если предметы на земле, призванные существа и отработавшие таймеры, которые должны исчезать, не удаляются и копятся, то чем дольше сервер работает, тем больше работы в каждом тике. (Команда разработки · Разработка сервера)
L10 Память
- Утечка памяти: Неосвобождённая память понемногу накапливается, и через несколько дней это заканчивается трешингом GC, свопом или принудительным завершением процесса. (Команда разработки · Разработка сервера)
- Трешинг GC (мало свободного места в куче): Когда живые данные приближаются к пределу кучи, GC почти нечего освобождать, и сборки идут одна за другой без перерыва. (Команда разработки · Разработка сервера)
- Своп: Когда памяти не хватает и ОС выгружает её часть на диск, при каждом обращении к этой памяти приходится ждать диск, который медленнее больше чем в 1 000 раз. (Команда инфраструктуры · Серверная инфраструктура)
- Промах кэша: Если данные разбросаны по памяти, CPU каждый раз ждёт медленную RAM. (Команда разработки · Разработка сервера)
- Фрагментация памяти: Когда из-за постоянных выделений и освобождений свободное место дробится на мелкие куски, процесс занимает намного больше памяти, чем реально использует. (Команда разработки · Разработка сервера)
- Удалённая память NUMA: На сервере с двумя процессорами обращение к памяти, подключённой к другому процессору, идёт медленнее. (Команда инфраструктуры · Серверная инфраструктура)
L11 Диск
- Исчерпание burst-кредитов облачного диска: У некоторых облачных дисков и небольших конфигураций серверов есть burst-кредиты, которые позволяют какое-то время работать быстрее базовой производительности. Если высокая нагрузка держится долго и кредиты кончаются, скорость резко падает. (Команда инфраструктуры · Серверная инфраструктура)
L13 Архитектура и эксплуатация серверов
- Задержка автомасштабирования: При наплыве игроков серверы добавляются автоматически, но подготовка занимает несколько минут, и всё это время существующие серверы перегружены. (Команда инфраструктуры · Серверная инфраструктура)
- Избыток макросов и ботов: Боты шлют запросы гораздо чаще людей и съедают производительность сервера. (Команда разработки · Разработка сервера)
Каталог симптомов с иллюстрациями