Пока физический сервер (гипервизор) временно отдаёт процессорное время виртуальной машины другим виртуальным машинам (CPU steal), игровой сервер стоит.
Почему Другие виртуальные машины на том же хосте активно используют CPU → Следствие Виртуальная машина игрового сервера то и дело не получает CPU на время от единиц до десятков ms → На экране Необъяснимые всплески времени тика: микрофризы, фризы
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Внешние стороны · Внешние стороны
Команда инфраструктуры: задачи
Мониторить steal (st в top и vmstat), использовать выделенные ядра или хосты, избегать burst-инстансов, которые замедляются, когда кончаются CPU-кредиты. Инстанс с постоянно высоким steal остановить и запустить заново, чтобы он переехал на другой хост.
Внешние стороны: задачи
Сообщить облачному провайдеру о хосте с постоянно высоким steal.
На графике
Случайные всплески · %steal, время тика сервера
Где смотреть
Наложить %steal из mpstat -P ALL 1 на время тика сервера на одной временной оси
Подтверждает
В моменты всплесков времени тика скачет и %steal, а после остановки, запуска и переезда на другой хост он снижается
Опровергает
Если %steal близок к 0, а время тика скачет, причина внутри игрового сервера («Полная пауза GC на сервере», «Конкуренция за блокировки»). Если сервер в контейнере, это «Троттлинг CPU в контейнере (квота CFS)»
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
proc_stat(5) — Linux manual pageLinux man-pages steal: время, отнятое в виртуализированной среде на выполнение других операционных систем
Standard mode for burstable performance instancesAWS Burst-инстансы тратят кредиты, чтобы работать выше базовой производительности, а когда кредиты заканчиваются, загрузка CPU снижается до базового уровня
mpstat(1) — Linux manual pagesysstat %steal: доля времени, в течение которого этот виртуальный CPU вынужденно ждал, пока гипервизор выполнял другой виртуальный CPU