Minecraft Java, Paper: встроенный spark с 1.21 · 6 мин чтения

Как читать профиль spark и находить причину лагов сервера

Записывайте сервер в момент воспроизводимой проблемы и связывайте ветки профиля с действиями игроков. Ниже — первый отчёт, чтение дерева и сравнение результата после одного изменения.

Редакция LonelyCraft · Обновлено

Авторская схема «Как читать профиль spark и находить причину лагов сервера»: Сценарий, Ветка, Проверка.
Как читать профиль spark и находить причину лагов сервера. Запись во время реальной проблемы.

Снимайте профиль во время проблемы

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

Начиная с Paper 1.21, spark включён в ядро. На других выпусках и платформах проверьте способ установки и совместимость отдельно. Команды требуют предусмотренных прав; обычному игроку они могут быть недоступны. В консоли сервера команды вводятся без начального слеша.

Перед записью запишите версию Paper, Java, основные плагины, число игроков и название сценария. Эти сведения помогают сравнивать отчёты. Проценты из двух профилей с разной нагрузкой нельзя считать прямым доказательством улучшения после одного изменения.

Первый полезный отчёт

В игре с административными правами выполните /spark profiler start --timeout 60; в серверной консоли — spark profiler start --timeout 60. Пока идёт запись, повторяйте проблему. Через минуту spark остановится и выдаст URL отчёта. Если запись нужно завершить раньше, используйте /spark profiler stop. Все варианты — в справочнике команд.

Для редких зависаний начните /spark profiler start --only-ticks-over 100 --timeout 300: профиль соберёт только тики дольше100мс за пять минут. Такой отчёт не сравнивают напрямую с обычным профилем всех тиков. Если нужно отказаться от записи без публикации, выполните /spark profiler cancel.

  1. Перед записью выполните /spark tps и запишите число игроков и конкретное действие, например первый вход в новую область.
  2. Запустите минутный профиль и повторите действие несколько раз.
  3. Не запускайте второй профиль до завершения первого; статус смотрите через /spark profiler info.
  4. Дождитесь ссылки, откройте её и сопоставьте период с моментом задержки.
  5. Если событие не попало в запись, повторите с300секундами вместо60; не делайте вывод о его причине по пустому спавну.
/spark profiler start --timeout 60

Как читать дерево вызовов

Откройте отчёт, выберите Server thread и нажимайте на крупные узлы дерева, чтобы раскрыть дочерние. Начните с ветки обработки тика, не с Thread.sleep/park: ожидание при свободном бюджете нормально. Наведите курсор на узел — интерфейс показывает оценённые миллисекунды. Руководство viewer иллюстрирует эти действия.

Пример: узел родителя занимает60%, его дочерний40%. Это вложенная работа, их нельзя сложить в100% отдельной нагрузки. Раскройте дочерний до конкретного метода плагина или операции мира, затем свяжите его с игровым действием. Большой процент на коротком лёгком профиле также не равен тяжёлой работе в абсолютных миллисекундах.

Частые группы причин

Генерация и загрузка местности

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

Сущности и механизмы

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

Плагин и внешние операции

Посмотрите, не выполняет ли плагин частые обходы большого списка или ожидание внешнего сервиса в неподходящем месте. Для разработчика полезна точная цепочка вызовов и сценарий. Общая просьба «сделать плагин асинхронным» не описывает, какие действия можно безопасно переносить между потоками.

Ограничения фоновой работы разобраны в статье задачи и потоки Paper.

Память и сборка мусора

Для состояния памяти используйте /spark health show --memory в новом spark; в старом выпуске смотрите доступный healthreport через help. Отдельный профиль выделений запускается /spark profiler start --alloc --timeout 60, если этот режим поддерживает среда. Команды памяти автора показывают ограничения. CPU-дерево не заменяет журнал OOM или проверку лимита контейнера.

Если разбираете повторные лаги каждые несколько секунд, сравните время пауз и игровые действия; затем проверяйте частые выделения или планировщик. Если сервер окончательно завершился, сохраните logs/latest.log и журнал процесса: факт завершения мог вообще не попасть в загруженный отчёт.

Проверить ограничения кучи и контейнера поможет материал бюджет памяти Java.

Сравнение до и после

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

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

Что отправить разработчику

Отправьте разработчику ссылку и короткий шаблон: «Paper1.21.1, Java21, 12игроков; 60сек записи; при телепорте в новый чанк блоки задерживаются; узел X занимает Yмс; после view-distance8 задержка изменилась так-то». Подставьте реальный узел и измерения, не копируйте учебные значения как результат.

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

Частые вопросы

Нужно ли устанавливать spark отдельно на Paper?

Начиная с Paper 1.21 он включён в ядро. Для другой версии или платформы проверьте совместимый способ установки. Доступ к командам также зависит от серверных прав.

Можно ли определить виновный плагин по одному проценту?

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

Как долго записывать профиль?

Интервал должен включать проблему. Короткая ограниченная запись подходит для повторяемого действия, более длинная — для редкого события. Не сравнивайте пустой сервер с загруженным и не записывайте часы без конкретной задачи.

Почему профиль пустого сервера не помогает?

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

Просмотры: … · Один просмотр с браузера за день

Было полезно?Общий счёт: …

Одна реакция с браузера. Нажмите повторно, чтобы снять её, или выберите другую.

Источники и документация

Minecraftоптимизациябезопасность

Читайте дальше

Авторская схема «Защита Minecraft-сервера от лагмашин и перегруженных механизмов»: Доступ, Лимиты, Наблюдение.

Производительность и защита · 6 мин

Защита Minecraft-сервера от лагмашин и перегруженных механизмов

Как найти источник перегрузки, ограничить проблемную область, проверить выключатели и переполнение ферм, а также убрать тяжёлые задачи плагинов.

Minecraft Java, Paper; лимиты зависят от ядра и версии

Авторская схема «Как защитить Minecraft-аккаунт, пароль сервера и модовую сборку»: Секреты, Источники, Доступ.

Производительность и защита · 6 мин

Как защитить Minecraft-аккаунт, пароль сервера и модовую сборку

Отдельные пароли, дополнительное подтверждение Microsoft, проверка модов и фальшивых подарков. Что делать при подозрении на потерю игрового доступа.

Java и Bedrock; серверные настройки зависят от платформы