Лаги на сервере Minecraft входят в число самых частых жалоб, которые слышит владелец сервера. Обычно они случаются в самый неудобный момент: друзья собрались поиграть вечером, а сломанные блоки возвращаются на место, мобы замирают, чат приходит с опозданием. Обиднее всего то, что сам VPS на бумаге выглядит вполне мощным.
Этот материал для тех, кто держит на виртуальном сервере небольшой мир для друзей, комьюнити-SMP или сборку с модами. Опыт системного администрирования не нужен. Мы разберём:
-
как устроена работа сервера;
-
как понять, откуда берутся задержки;
-
что исправить в первую очередь, а что можно оставить на потом.
Тормозит точно сервер? Три вида лагов, которые выглядят одинаково
Игроки называют лагом всё, что кажется медленным. На практике за этим словом стоят три разные проблемы, и у каждой свои способы решения.
Серверный лаг. Сервер не успевает просчитывать игру. Типичные признаки:
-
сломанный блок на секунду появляется снова;
-
мобы двигаются рывками или застывают;
-
сообщения в чате приходят с задержкой;
-
всех игроков одновременно откидывает назад.
Сетевой лаг. Сервер считает всё вовремя, но данные между игроком и сервером идут слишком долго или теряются. У игрока высокий пинг в списке, а показатели сервера при этом в норме.
Клиентский лаг. Компьютер самого игрока не справляется с картинкой. Падает FPS из-за шейдеров, большой дальности прорисовки или слабой видеокарты. Сервер здесь ни при чём.
Разобраться помогает простое правило. Если лагает у всех сразу, смотрим на сервер. Если жалуется один человек, начинаем с его подключения или ПК. Дальше в статье речь пойдёт именно о первом случае.
Как сервер просчитывает игру: тики, TPS и MSPT
Чтобы найти причину задержек, нужно знать два показателя. Оба описывают, как сервер справляется со своей главной задачей: снова и снова обновлять игровой мир.
Почему цифра 20 так важна
Сервер Minecraft обновляет мир небольшими шагами, они называются тиками. За один тик он двигает мобов, выращивает урожай, запускает редстоун, обрабатывает действия игроков и многое другое. Игра рассчитана на 20 тиков в секунду, поэтому на каждый тик у сервера есть 50 миллисекунд.
TPS (ticks per second, тики в секунду) показывает, укладывается ли сервер в этот бюджет:
-
20 TPS: всё работает так, как задумано;
-
от 15 до 17 TPS: игроки начинают замечать задержки;
-
от 10 до 14 TPS: играть тяжело и неуютно;
-
ниже 10 TPS: сервер почти неиграбелен.
Почему MSPT предупреждает раньше TPS
TPS не бывает выше 20, поэтому здоровый сервер и сервер на грани показывают одно и то же значение. MSPT (milliseconds per tick, миллисекунды на тик) говорит, сколько времени уходит на каждый тик. По нему проблему видно заранее:
-
до 30 мс: всё хорошо, есть запас под новых игроков;
-
от 30 до 45 мс: впритык, но играть можно;
-
выше 50 мс: TPS упадёт, и игроки это почувствуют.
Сервер с 20 TPS и 46 мс на тик выглядит идеально. Но достаточно ещё одного игрока, который побежит исследовать новые земли, и лимит будет превышен. Средние значения к тому же прячут пики. Если обычный тик занимает 22 мс, а каждый двадцатый тянется 140 мс, игроки будут жаловаться на лаги при TPS 19.9. Поэтому хорошие профайлеры показывают время тика распределением, а одной цифре доверять опасно.
Почему одно ядро важнее десяти
Эта деталь удивляет большинство начинающих админов. Основной игровой цикл работает в одном потоке, и в документации Paper прямо советуют выбирать процессор с высокой однопоточной производительностью. Загрузка чанков, сеть и сборка мусора используют другие потоки, но сам тик зависит от одного ядра.
Вывод для практики: сервер с 32 медленными ядрами может работать хуже, чем сервер с 8 быстрыми. При аренде VPS частота и качество каждого виртуального ядра важнее их общего количества.
Что добавляет к картине VPS
Виртуальный сервер делит физическую машину с другими клиентами. Это нормально и обычно работает хорошо, но появляется несколько причин лагов, которых не бывает на домашнем ПК.
CPU steal time. Гипервизор распределяет процессорное время между виртуальными машинами. Если вашему серверу нужен процессор, а он занят чужими задачами, сервер ждёт. Это ожидание называется steal time, в Linux оно видно как «st» в утилитах top и vmstat. Инженеры хостингов обычно считают, что steal от 3 до 5% в пиковые часы стоит изучить, а устойчивые 10% и больше говорят о перегруженном хосте.
Шумные соседи. На дешёвых тарифах некоторые провайдеры продают больше виртуальных ядер, чем может обслужить железо. Стоит соседу запустить тяжёлую задачу, и ваш игровой цикл проигрывает борьбу за процессор. Для Minecraft это пропущенный тик.
Медленный диск. Сервер постоянно читает и записывает чанки, данные игроков и базы плагинов. Если TPS проседает при каждом автосохранении мира, узкое место скорее всего в диске. Частая причина в HDD или перегруженном общем хранилище, поэтому для игровых серверов стандартом стали NVMe-диски.
Расстояние до игроков. Пинг зависит от географии. Если ваше сообщество в основном из Казахстана, сервер в европейском дата-центре добавит каждому игроку лишнюю задержку ещё до того, как сервер начнёт обработку. Площадка в Алматы заметно сокращает этот путь.
При выборе хостинга важно видеть, что именно вы получаете. На VPS Serverspace количество ядер, объём памяти и диска вы выбираете сами, нагрузку видите в панели управления, а конфигурацию можно поменять позже без переноса мира к другому провайдеру. Для казахстанских игроков есть дата-центр в Алматы. Так проще отделить проблему инфраструктуры от проблемы настроек, и с этого начинается любой поиск причин лагов.
Как найти причину: диагностика по шагам
Угадывать дольше, чем измерять. Команда PaperMC рекомендует сначала профилировать сервер и только потом что-то менять. Шаги ниже идут от быстрых проверок к подробному анализу.
Шаг 1. Проверьте TPS и MSPT в игре
На Paper и его форках введите /tps и /mspt в консоли или в чате с правами оператора. Запишите значения во время обычной игры и в момент, когда игроки жалуются.
Шаг 2. Посмотрите отчёт о состоянии в spark
spark это бесплатный профайлер производительности. Начиная с версии 1.21 он встроен в Paper, ставить ничего не нужно. Две команды дают быстрый обзор:
-
/spark tps показывает TPS за несколько промежутков времени и MSPT цветной шкалой;
-
/spark health добавляет расход памяти, нагрузку на процессор и диск.
Старый инструмент Timings устарел и по умолчанию отключён, так что инструкции с ним можно пропускать.
Шаг 3. Запустите профайлер во время лагов
Начните запись в тот момент, когда сервер тормозит:
/spark profiler start --timeout 600
Через 10 минут spark выдаст ссылку на веб-отчёт. Откройте его и посмотрите на верх списка: там то, на что сервер тратит больше всего времени тика. Обычно это одно из трёх:
-
конкретный плагин;
-
тип сущностей, например жители или рамки для предметов;
-
генерация чанков.
Если лаги приходят короткими всплесками, добавьте параметр --only-ticks-over 100, чтобы в отчёт попали только медленные тики.
Шаг 4. Проверьте сам VPS
Подключитесь к серверу по SSH и запустите top или vmstat 1. Смотрите на три показателя:
-
st (steal): если он растёт ровно тогда, когда начинаются лаги, хосту не хватает процессора;
-
одно ядро на 100%: игровой цикл упёрся в потолок, нужны правки настроек или более быстрый CPU;
-
wa (ожидание ввода-вывода): высокие значения указывают на медленный диск.
Шаг 5. Исключите сеть и атаки
Если TPS держится на 20, MSPT низкий, а игроков всё равно выкидывает, проблема находится за пределами игрового цикла. Сообщение в консоли «Can’t keep up! Is the server overloaded?» всегда означает, что тормозит сам сервер. Сетевые атаки обычно на TPS не влияют. Чтобы проверить, нет ли флуда, посчитайте подключения к игровому порту:
Тысячи подключений с небольшого числа адресов или волна входов ботов в логе говорят об атаке. Тогда нужна фильтрация на уровне сети или защитный прокси перед сервером. Плагины тут не помогут.
Как убрать лаги: от самых заметных правок к мелким
Когда причина известна, исправляйте всё по порядку влияния. Опытные админы советуют начинать с серверного ядра и настроек мира, а о железе думать в последнюю очередь.
Перейдите на Paper или Purpur и проверьте версию Java
Официальный сервер от Mojang работает менее эффективно, чем альтернативы. Paper это бесплатный форк, в котором переписаны многие медленные части игры, при этом он совместим с обычными клиентами. Purpur построен на Paper и даёт ещё больше настроек. Для очень крупных серверов есть Folia: она делит мир на регионы и считает их на разных ядрах. Но многие плагины с ней несовместимы, и для небольшой компании она избыточна.
Следите за версией Java. Начиная с Minecraft 26.1 сервер Paper требует Java 25 или новее и не запускается на Java 21. Версии с 1.20.5 по 1.21.x работают на Java 21.
Сначала снижайте дистанцию симуляции, потом прорисовки
Два параметра в server.properties сильнее всего влияют на нагрузку:
-
view-distance: сколько чанков вокруг игрока сервер отправляет клиенту, чтобы игрок их видел;
-
simulation-distance: сколько чанков вокруг игрока активны, то есть там двигаются мобы, растёт урожай и работает редстоун.
Дистанция симуляции нагружает основной поток гораздо сильнее, поэтому снижайте её первой. Хорошая отправная точка: view-distance=7 и simulation-distance=4. Игроки по-прежнему видят далеко, а сервер просчитывает меньшую область.
Важная оговорка. Если уменьшить дистанции и не поправить радиусы появления и исчезновения мобов в настройках Paper, часть мобов может перестать исчезать. Изменение радиусов спавна к тому же ломает многие популярные фермы, так что предупредите игроков заранее.
Сгенерируйте мир заранее
Генерация нового ландшафта входит в число самых тяжёлых операций сервера. Когда несколько игроков разбегаются в разные стороны, сервер строит новые чанки для каждого прямо на ходу. Плагин Chunky решает это, генерируя карту заранее:
/chunky radius 2500
/chunky start
Для небольшого сервера разумно начать с радиуса от 1000 до 2500 блоков. Запустите генерацию до открытия мира или на ночь и учтите, что большая карта займёт больше места на диске.
Наведите порядок с сущностями, фермами и редстоуном
Избыток сущностей чаще всего становится причиной низкого TPS. Каждый моб, выпавший предмет, вагонетка или рамка обрабатываются каждый тик. Чтобы найти проблемные места:
-
выполните /minecraft:debug entities или посмотрите отчёт spark;
-
поищите фермы с сотнями животных или жителей в одном месте;
-
проверьте редстоун-часы, которые работают без остановки.
В файле paper-world-defaults.yml Paper позволяет ограничить число сущностей на чанк и сократить проверки столкновений. Purpur умеет упрощать поведение жителей для больших торговых залов. Помогает и простое правило для игроков, например лимит животных в одном загоне.
Выделите Java столько памяти, сколько нужно
Память помогает только до определённого предела. Если отдать Java сильно больше, чем ей требуется, сборщику мусора придётся убирать больше, и его паузы станут длиннее. Это выглядит как регулярные подвисания раз в несколько секунд, хотя свободной памяти много.
Практичные правила:
-
задайте одинаковый стартовый и максимальный объём, например -Xms6G -Xmx6G;
-
оставьте от 1 до 2 ГБ памяти VPS для операционной системы;
-
используйте флаги Aikar, набор параметров запуска для сборщика G1, который остаётся официальной рекомендацией PaperMC.
Проверьте плагины
Плохо написанные плагины занимают второе место среди причин лагов сразу после сущностей. Под подозрением обычно рендеры карт, тяжёлые античиты и плагины, которые обращаются к базе данных при каждом событии. В отчёте spark видна доля каждого плагина во времени тика. Обновите главного виновника, найдите облегчённую замену или удалите его.
Когда решение в более мощном тарифе
Бывает, что настройки в порядке, мир сгенерирован, профайлер ничего необычного не показывает, а одно ядро всё равно загружено на 100% или steal time продолжает расти. Значит, вы упёрлись в возможности железа, и разумный шаг здесь в увеличении ресурсов. На VPS Serverspace процессор и память можно добавить в панели управления по мере роста сообщества, сервер и мир при этом остаются прежними.
Какая правка подходит под ваш симптом?
Таблица поможет быстро сориентироваться, если лаги вернутся.
| Симптом | Вероятная причина | Как проверить | Что сделать |
|---|---|---|---|
| Лагает, когда игроки исследуют новые земли | Генерация чанков на ходу | В отчёте spark генерация мира в начале списка | Сгенерировать мир через Chunky, снизить simulation-distance |
| Короткие подвисания раз в несколько секунд | Паузы сборщика мусора | /spark health, раздел GC в отчёте spark |
Задать Xms равным Xmx, включить флаги Aikar, не раздувать память |
| TPS падает возле одной базы или фермы | Много сущностей или редстоун-часов | /minecraft:debug entities, отчёт spark |
Лимиты сущностей в Paper, фермы поменьше, отключить постоянные часы |
| Случайные зависания при малом онлайне | Steal time на загруженном хосте | Столбец «st» в top или vmstat | Перейти на тариф с предсказуемым CPU |
| TPS проседает при автосохранении | Медленный или перегруженный диск | «wa» в top, совпадение просадок с сохранением | NVMe-диск, удаление лишних чанков |
| Одно ядро на 100%, MSPT выше 50 мс | Основной поток упёрся в предел | top с отображением по ядрам | Снизить дистанции, проверить плагины, взять CPU быстрее |
| TPS 20, но лагает у одного игрока | Сеть или ПК игрока | Пинг в списке игроков, экран F3 | Дата-центр ближе, проводное подключение, лёгкие настройки клиента |
| Массовые входы и отключения при нормальном TPS | Атака ботов или DDoS | netstat по порту 25565, лог сервера | Фильтрующий прокси, белый список, лимиты в файрволе |
| Сервер не запускается после обновления | Устаревшая Java | Ошибка в консоли при старте | Установить Java 25 для Minecraft 26.1 и новее |
Чем приходится платить за каждую правку
У любой оптимизации есть цена, и её лучше знать заранее:
-
Меньшие дистанции делают мир визуально меньше, а дальние фермы перестают работать, пока рядом никого нет.
-
Лимиты сущностей могут сломать фермы, на которые игроки потратили часы.
-
Folia использует несколько ядер, но сужает выбор плагинов.
-
Предварительная генерация требует времени и места на диске, папка мира растёт.
-
Меньше плагинов означает меньше возможностей для игроков.
-
Тариф мощнее снимает ограничения железа, но обходится дороже каждый месяц.
Лучше всего менять по одному параметру за раз, проверять результат через spark и объяснять игрокам, что изменилось и зачем.
Пять типовых ситуаций и как с ними справиться
1. Новый мир и всеобщее исследование. В день запуска десять игроков разбегаются в разные стороны. MSPT подскакивает выше 70 мс, а spark показывает генерацию чанков на первом месте. Что помогает: генерация карты через Chunky на 2500 блоков и сниженная дистанция симуляции в первую неделю.
2. Подвисания каждые несколько секунд при свободной памяти. На VPS с 16 ГБ серверу выделено 12 ГБ, но он регулярно замирает, а профайлер указывает на сборку мусора. Что помогает: уменьшить память до 8 ГБ, выровнять стартовый и максимальный объём, включить флаги Aikar.
3. Железная ферма на 200 жителей. TPS падает только рядом с базой одного игрока. Что помогает: упрощённая логика жителей в Purpur и серверное правило, которое ограничивает размер ферм.
4. Зависания, которые не совпадают ни с чем в игре. Лаги случаются в разное время суток, даже когда онлайн всего два или три человека. vmstat показывает, что во время зависаний steal time подскакивает до 15%. Что помогает: переезд на VPS с предсказуемыми ресурсами процессора.
5. TPS 20, а всех выкидывает. Игроков отключает волнами, а в логе сотни входов с незнакомых аккаунтов. Это атака ботов. Что помогает: фильтрующий прокси перед сервером, белый список и лимиты подключений в файрволе.
Частые ошибки, из-за которых лагов становится больше
-
Докупать память, когда проблема в процессоре. Память не ускоряет одно ядро. Если MSPT высокий, а RAM свободна, смотрите на CPU и настройки.
-
Отдавать Java всю память VPS. Системе тоже нужно место, а слишком большой объём удлиняет паузы сборщика мусора.
-
Оставаться на ванильном сервере. Переход на Paper или Purpur часто сам по себе даёт заметный прирост.
-
Менять настройки наугад. Без отчёта spark не понять, помогла ли правка. Замеряйте до и после.
-
Полагаться на «антилаг»-плагины. Удаление предметов и мобов по таймеру прячет причину и раздражает игроков.
-
Обновить Minecraft и забыть про Java. После перехода на 26.1 сервер на Java 21 просто не запустится.
-
Урезать дистанции без правки радиусов спавна. В итоге мобы перестают исчезать, а фермы ломаются.
-
Путать атаку с перегрузкой сервера. Низкий TPS указывает на сервер, а TPS 20 с массовыми отключениями указывает на сеть.
Вывод: сначала измеряем, потом исправляем
У лагов почти всегда есть конкретная причина, и найти её проще, чем кажется. Действуйте по порядку:
-
Определите вид лага: серверный, сетевой или клиентский.
-
Смотрите на MSPT вместе с TPS.
-
Запишите профиль spark в момент лагов.
-
Проверьте steal time, процессор и диск на VPS.
-
Вносите правки от самых заметных к мелким и замеряйте результат после каждой.
Хороший следующий шаг: выполнить /spark health сегодня, пока сервер работает спокойно, и сохранить результат. Когда игроки снова начнут жаловаться, у вас будет эталон для сравнения. Если замеры покажут, что предел в самом железе, VPS с прозрачными и масштабируемыми ресурсами вроде Serverspace снимет инфраструктурную часть проблемы, и останется только довести до ума настройки.