Minecraft Руководство

Minecraft тормозит при исследовании мира: как найти причину через Spark

Профилируйте Paper через Spark и отличайте генерацию чанков от тиков, сети, диска и клиентского FPS.

Minecraft тормозит при исследовании мира: как найти причину через Spark

Если лаг появляется, когда игроки летят к новым биомам, это ещё не доказывает, что сервер не успевает генерировать чанки. Уже созданные чанки могут медленно читаться или отправляться, а клиент — не успевать их отрисовать. Сначала сопоставьте игровой симптом с серверными тиками, затем выбирайте исправление.

Ниже — диагностика для Paper 1.21 и новее: в этих версиях Paper уже включает Spark. На Fabric, NeoForge, Forge, Velocity или более старой сборке сначала проверьте совместимость подходящего Spark-плагина или мода с вашим загрузчиком и версией. Не ставьте случайный JAR в plugins или mods.

Зафиксируйте, что именно происходит#

Перед профилированием запишите сборку сервера, версию Minecraft и Java, число игроков, примерное место проблемы и момент начала. Уточните, едут ли игроки по новой территории или по уже исследованной; повторяется ли задержка при остановке; у кого именно видны рывки. Не запускайте диагностику одновременно с массовой предгенерацией мира.

Разделяйте три признака:

  • Высокий MSPT или просевший TPS во время рывка: сервер дольше обрабатывает игровые тики. Генерация может быть причиной, но также проверьте сущности, моды и плагины.
  • Нормальные тики, но новые чанки приходят с задержкой: ищите дополнительные данные по чтению диска, очередям/асинхронной загрузке, сетевому пути и передаче чанков. Одного CPU-профиля недостаточно, чтобы измерить все эти слои.
  • Серверные показатели нормальные, а картинка дёргается у игрока: проверьте FPS клиента и настройки рендеринга. Это не обязательно серверная проблема.

В обсуждениях Admincraft такие случаи легко принять за одну неисправность: медленная загрузка при полёте по уже созданному миру, профиль с нормальным TPS, но долгой подачей чанков и проблема, оставшаяся после предгенерации описывают разные симптомы и не дают одного универсального диагноза.

Диагностика задержки чанков. Схема объясняет порядок действий; это не запись живого профиля или теста.

Снимите профиль во время воспроизведения#

На Paper 1.21+ Spark уже установлен. Команда требует права оператора либо настроенного разрешения Spark. Начните ограниченный по времени профиль перед повторением проблемы:

text
spark profiler start --timeout 300

В течение этих пяти минут повторите обычный маршрут или дождитесь типичного рывка; не создавайте специально экстремальную нагрузку на живом мире. Профиль завершится по таймеру. Чтобы остановить его раньше, выполните:

text
spark profiler stop --save-to-file

Проверьте результат и найдите поток Server thread: Spark описывает его как основной поток, выполняющий игровую работу сервера. В дереве профиля раскройте узлы с наибольшей долей времени, а не делайте вывод по одному названию метода. Высокая доля работы мира/генерации в совпавший с рывком период — основание проверить этот путь дальше, но не доказательство, что виноват конкретный диск или процессор.

Средний профиль может скрыть редкий длинный тик. Для коротких, но повторяющихся зависаний можно включить мониторинг:

text
spark tickmonitor

Когда увидите связь между сообщением о длинном тике и действием в игре, снимите профиль только для тиков выше выбранного порога, например:

text
spark profiler start --only-ticks-over 100 --timeout 300

Порог в примере — стартовая точка для наблюдения, а не норматив производительности. Сверяйте его с фактически замеченными рывками. Остановите мониторинг повторным spark tickmonitor. Завершайте профиль локально командой spark profiler stop --save-to-file: сервер сохранит файл без загрузки в онлайн-просмотрщик. Если для помощи нужен веб-отчёт, сначала получите согласие владельца мира, проверьте содержимое и только затем осознанно выберите загрузку; профили могут раскрывать имена игроков и сведения о конфигурации.

Сравните новую и уже созданную территорию#

Повторите один и тот же короткий маршрут сначала по новой, затем по заведомо исследованной области при похожем числе игроков и нагрузке. Не меняйте одновременно сборку, плагины, параметры мира и аргументы Java: иначе сравнение не покажет, что повлияло на результат. Сделайте резервную копию перед изменениями мира.

Если длинные тики совпадают с генерацией новой местности, изучите ветви генерации мира и модов/плагинов в профиле. Проверьте, не совпало ли начало проблемы с добавлением генератора, обновлением сборки или изменением настроек. Для ограниченной тестовой зоны можно отдельно оценить предгенерацию совместимым инструментом, но во время процесса игроки могут почувствовать дополнительную нагрузку, а миру понадобится место на диске. Не запускайте без расчёта большой радиус и не удаляйте region-файлы ради проверки.

Если MSPT остаётся нормальным, но чанки приходят поздно, соберите отдельные данные о дисковых задержках, доступной пропускной способности, потерях пакетов и параметрах отправки чанков. Реализация сервера может загружать часть чанков асинхронно, поэтому один профиль главного потока способен не показать ожидание. Сравните симптомы у нескольких игроков и на одном клиенте по возможности; локальная отрисовка и путь до сервера — разные проверки. Для сервера под вашим управлением, например через Nexardo, Spark-профиль всё равно нужно снимать в момент симптома: панель управления не заменяет измерение игровых тиков.

Исправляйте только найденное узкое место#

  • Если профиль указывает на генерацию или работу конкретного мода/плагина, проверьте его совместимость, настройки и воспроизводимость после резервной копии. Изменяйте один фактор за раз.
  • Если профиль показывает долгую работу сущностей или задач плагина, ищите эту нагрузку вместо бездумной замены процессора.
  • Если серверные тики здоровы, а задержка осталась, исследуйте диск, сеть, дистанции отправки чанков и клиент отдельно. Spark не является сетевым тестом или измерителем FPS.
  • Не копируйте универсальные JVM-флаги и не увеличивайте память без данных. Конфигурация Java зависит от сборки, runtime и ограничений машины; флаги не исправляют любой тип задержки.

Для разбора сохраните версию сервера, загрузчик, Java, время профиля, точный маршрут, TPS/MSPT до и во время проблемы, недавние изменения и описание клиентского симптома. Вопросы Admincraft о скорости генерации и выборе CPU, RAM или HDD показывают, почему полезнее сначала получить воспроизводимый профиль, чем угадывать апгрейд по одному слову «лаги».