Мониторинг TPS и лагов на игровом сервере
Игроки пишут «сервер лагает», а дальше начинается угадайка — то ли не хватает памяти, то ли сервер не успевает считать мир, то ли у кого-то одного просто плохой интернет и он путает свои проблемы с общими. Это разные диагнозы с разным лечением, и если лечить не то — потеряешь время и, возможно, деньги на апгрейд тарифа, который не решит проблему. Разберём по шагам, как отличить один вид лагов от другого на сервере любой игры и что с каждым из них реально можно сделать.
Содержание
Три разных "лагает": тики, сеть, клиентский FPS
Первое, с чего стоит начать любую диагностику — развести три независимых явления, которые игроки называют одним словом.
Тик-лаги (tick lag) — сервер не успевает обсчитать игровой мир за отведённое время. У каждой игры с постоянным игровым временем есть свой тикрейт: Minecraft считает 20 тиков в секунду (по 50 мс на тик), Source-движок (CS2, TF2, Left 4 Dead 2) обычно работает на 64 или 128 тиках в зависимости от настроек сервера, Rust и большинство survival-игр держат собственный внутренний цикл обновления мира. Когда сервер не укладывается в бюджет времени на тик — это ощущается как рывки, задержка реакции мира на действия игрока, замедленный респавн.
Сетевые лаги — пакеты идут медленно или теряются между клиентом и сервером. Это не имеет отношения к тому, как быстро сервер считает мир — сервер может быть в идеальном состоянии, а конкретный игрок всё равно будет лагать из-за своего провайдера, плохого маршрута до дата-центра или проблем на стороне хостинга с сетевым каналом.
Клиентский FPS — это вообще не про сервер. Просадка кадров в игре у конкретного игрока — его железо, драйверы, настройки графики. Отдельная больная тема: игроки часто путают низкий FPS у себя с «сервер лагает», хотя это никак не связанные метрики.
Дальше в статье — как проверить каждую из трёх причин отдельно, не смешивая их в одну кучу подозрений.
Встроенная диагностика в разных играх
У большинства серверных игр есть собственные команды или консольные метрики для тиков — начинать стоит с них, а не с внешнего мониторинга.
Minecraft (Paper/Spigot и форки): команда /tps показывает три значения — среднее за 5 секунд, 1 минуту и 5 минут. Норма — стабильные 19.5-20. Если у вас именно Minecraft и тема глубже, чем общий обзор — есть отдельная разборная статья про оптимизацию модов и TPS на Minecraft-сервере с профайлером spark и конкретными настройками spigot.yml — здесь принцип общий для всех игр, там — конкретика именно под Minecraft.
Source-движок (CS2, TF2, L4D2, Insurgency): в консоли сервера команда stats покажет текущую загрузку CPU сервера и FPS тика; на клиенте net_graph 1 выводит пинг, потери пакетов (loss) и choke — забитость канала. Разница между loss и choke важна: loss — пакеты реально потерялись по дороге, choke — клиент или сервер не успевает их обработать вовремя, это уже про производительность, а не про сеть.
Rust: серверная консоль показывает FPS сервера прямо в заголовке окна или через RCON-команду serverinfo — там же видно количество активных объектов (entities) и текущий онлайн. Rust особенно чувствителен к количеству построек и предметов на карте, это частый источник просадки FPS сервера при большом населении.
ARK: Survival (Evolved/Ascended) и подобные survival-песочницы: встроенных команд диагностики тиков заметно меньше, чем у Minecraft или Source — на практике админы чаще опираются на общий мониторинг ресурсов хоста и на RCON-команды для подсчёта существ и построек (getgamelog, сторонние ASA/ASE-менеджеры). Если сервер с модами — учтите, что каждый мод добавляет свою нагрузку на тик, и вычислить виновника без исключения по одному бывает сложнее, чем в Minecraft со spark-профайлером.
Если игра, с которой вы работаете, не даёт встроенных метрик тика вообще (такое встречается у менее популярных инди-проектов) — единственный доступный путь это внешний мониторинг ресурсов хоста, о котором ниже, плюс логи.
Нужен игровой сервер?
MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.
Создать серверЛоги сервера: что искать
Логи — второй источник правды, особенно когда встроенные команды диагностики недоступны или не объясняют причину.
Что искать в первую очередь:
- сообщения о нехватке памяти (
OutOfMemoryErrorдля Java-серверов вроде Minecraft,Out of memoryили падения с кодом выхода по сигналу OOM-killer для нативных серверов на Linux); - прямые предупреждения о просадке тика — например, в Minecraft это строка
Can't keep up! Is the server overloaded?, у других движков формулировки отличаются, но суть одна: сервер сам сообщает, что не успевает; - повторяющиеся ошибки от плагинов/модов — стектрейсы, зацикленные варнинги каждую секунду часто означают, что конкретный плагин ест процессорное время впустую;
- разрывы соединений и таймауты RCON — если админ-консоль периодически отваливается, это косвенный признак, что основной процесс сервера подвисает под нагрузкой.
Логи обычно лежат в папке logs/ рядом с исполняемым файлом сервера (Minecraft — logs/latest.log), либо выводятся в консоль процесса и доступны через панель хостинга или journalctl, если сервер запущен как systemd-сервис на своей VPS. Смотрите не только на момент жалобы игрока, но и на 5-10 минут до неё — часто проблема нарастает постепенно (утечка памяти, накопление сущностей), а не возникает внезапно.
Ресурсы хоста: CPU/RAM и почему это не то же самое, что "игра тормозит"
Здесь важно чётко разделить: тормозит ли игра из-за своей логики (тик-лаг при достаточных ресурсах) или сервер физически упирается в потолок выделенных CPU/RAM. Это разные проблемы с разными решениями.
Проверка на Linux-сервере через SSH:
htop
Смотрите на:
- Load average — если значение стабильно выше количества выделенных ядер, процессор не справляется с общей нагрузкой;
- % CPU конкретного процесса сервера — если один процесс жрёт 100% одного ядра постоянно, а не пиково, это явный сигнал упора в CPU;
- Использование RAM — если сервер вплотную подошёл к лимиту и активно уходит в swap (строка
Swpв htop растёт) — это почти гарантированно источник рывков и подвисаний, потому что своп на порядок медленнее оперативной памяти.
Если у вас управляемый тариф в панели хостинга — не обязательно лезть в SSH: у большинства панелей игровых серверов, включая MAATRIX GAMES, есть встроенный график потребления CPU/RAM прямо в личном кабинете сервера, без необходимости поднимать консоль вручную.
Здесь стоит быть честным: если сервер стабильно потребляет 90-100% выделенного CPU в часы пиковой нагрузки при разумных настройках — это не баг конфигурации, а сигнал, что тарифа не хватает под текущее количество игроков/контента, и никакая оптимизация конфига физически не создаст дополнительное процессорное время из воздуха. В этом случае единственное честное решение — апгрейд тарифа сервера на более мощный.
Типичные причины лагов
Если диагностика выше указала на реальную проблему (не сеть, не клиентский FPS), вот с чего обычно начинать поиск виновника — по убыванию частоты:
- Слишком много активных сущностей/объектов на карте. Фермы мобов в Minecraft, накопленные постройки и предметы в Rust, большое число прирученных существ в ARK — каждая единица требует обсчёта каждый тик. Чем больше построек и NPC/мобов накопилось за долгую жизнь сервера без чистки — тем тяжелее становится каждый тик со временем.
- Тяжёлые плагины, моды или скрипты. Плохо написанный или устаревший плагин может съедать непропорционально много времени тика относительно того, что он делает. Для серверов с плагинами (Rust на Oxide/uMod, Minecraft на Paper) стоит проверить — есть разбор установки и первых плагинов в статье про Oxide/uMod для Rust, там же принцип «добавляй по одному и проверяй» работает для любой игры с плагинной системой.
- Слишком много игроков для текущего тарифа. Онлайн, который сервер физически не тянет по CPU — самая частая причина стабильной, а не эпизодической просадки.
- Сетевые проблемы, а не серверные. Если жалуется один-два игрока, а остальные не замечают проблем — вероятнее всего, дело в их маршруте до дата-центра, а не в сервере. Здесь помогает
tracert(Windows) илиtraceroute/mtr(Linux/macOS) с клиентской машины до IP сервера — если потери пакетов видны на конкретном промежуточном узле маршрута, это не то, что чинится настройками игрового сервера. В таких случаях иногда помогает просто выбор ближе расположенной локации хостинга к основной аудитории игроков — например, между UK, US и RU-регионами разница в пинге для игроков из конкретной страны может быть заметной. - Раздутые для конкретной игры настройки прогрузки/дистанции. Там, где применимо (view-distance-подобные параметры), избыточный радиус прогрузки контента вокруг игроков — постоянный источник лишней нагрузки, которая растёт нелинейно с увеличением радиуса.
Как снизить нагрузку: практические рычаги
Прежде чем упираться в апгрейд тарифа, стоит пройтись по конфигурационным рычагам — они бесплатны и часто дают заметный эффект:
- Лимиты на количество объектов. Где игра это позволяет — ограничивайте максимум сущностей/построек на карте или на игрока. В модовых и плагинных сборках это обычно настраивается в конфиге самого мода или через отдельный плагин очистки (для Minecraft — периодический
/killдропнутых предметов, для Rust — лимиты на количество построек в скрипте на Oxide/uMod). - Снижение view-distance / render-distance там, где применимо. Не все игры вообще имеют этот параметр, но там где есть (Minecraft, некоторые survival-игры на кастомных серверных биндах) — это один из самых быстрых способов уменьшить нагрузку без изменения правил игры.
- Регулярная очистка накопленного мусора. Заброшенные постройки неактивных игроков, горы дропа, старые чанк-лоадеры — банальная уборка карты раз в 1-2 недели снимает часть нагрузки почти бесплатно.
- Обновление и пересмотр плагинов/модов. Заброшенный или устаревший плагин, который никто не обновлял под текущую версию игры, — частый скрытый источник лагов. Проверка актуальности установленных плагинов/модов — рутинная, но недооценённая мера.
- Плановые перезапуски. Для серверов с утечками памяти (когда RAM постепенно растёт без явной причины) регулярный рестарт раз в сутки — грубый, но рабочий костыль, пока не найдена коренная причина утечки.
- Проверка совместимости модов между собой — актуально не только для Minecraft, но и для, например, ARK с большим количеством структурных модов: разбор популярных сборок есть в статье про топ модов для ARK: Survival, логика отбора и тестирования там применима к любой модовой игре.
Если после всех этих шагов сервер всё ещё упирается в потолок CPU в часы пик — это уже не зона конфига, а честный сигнал для апгрейда тарифа.
Нужен игровой сервер?
MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.
Создать серверЧастые вопросы
Как быстро понять, лагает сервер у всех или у одного игрока?
Спросите в чате — если жалуется один человек, а остальные онлайн не замечают проблем, вероятнее всего дело в его сети или железе, а не в сервере. Групповая жалоба сразу нескольких игроков одновременно — куда более надёжный сигнал реальной серверной проблемы.
Нужно ли постоянно держать открытым мониторинг ресурсов?
Не обязательно круглосуточно, но полезно проверять график CPU/RAM в панели хостинга хотя бы раз в день на активном проекте и обязательно — сразу после жалоб на лаги, чтобы поймать состояние сервера в момент проблемы, а не постфактум.
Апгрейд тарифа точно решит проблему с лагами?
Только если причина реально в нехватке ресурсов (CPU/RAM упираются в потолок). Если тик-лаги вызваны неоптимальным конфигом, раздутым числом сущностей или кривым плагином — апгрейд даст временную передышку за счёт запаса мощности, но не устранит первопричину, и проблема со временем вернётся.
Что делать, если игра вообще не даёт никаких встроенных метрик тика?
Опираться на внешний мониторинг ресурсов хоста (CPU/RAM через htop или панель хостинга) и логи сервера — это универсальный путь, который работает независимо от того, насколько развита диагностика внутри конкретной игры.
Packet loss и просадка тика могут случаться одновременно?
Да, и это худший случай для диагностики — если видите жалобы на лаги и при этом высокий CPU load, и потери пакетов по traceroute одновременно, разбирайтесь по очереди: сначала стабилизируйте нагрузку на сервер (она чаще в ваших руках), потом отдельно разбирайтесь с сетевым маршрутом.