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

Почему лагает сервер Minecraft и как найти причину через spark

Как отличить высокий пинг от лагов Minecraft, прочитать TPS и MSPT, найти причину через spark и проверить память сервера.

Почему лагает сервер Minecraft и как найти причину через spark

Снимите профиль во время лагов, найдите работу, которая занимает игровой поток, и проверьте одно изменение повторным замером. Разберём Paper со spark и отделим медленную симуляцию мира от проблем соединения или FPS отдельного игрока.

Определите, что именно тормозит#

Спросите игроков, случилось ли зависание у всех одновременно. Общая пауза при добыче блоков или работе фермы указывает на возможную проблему сервера; если жалуется один игрок, сначала проверьте его соединение и FPS.

При обычной скорости игры цель — 20 TPS и бюджет 50 мс на тик. MSPT показывает время обработки тиков: смотрите медиану, 95-й процентиль и максимум, а не только среднее. Нормальное среднее TPS может скрывать короткую паузу. Значения разобраны в справке spark по метрикам.

Выбирайте первое измерение по симптому. Ветви схемы помогают начать проверку, но сами по себе не доказывают причину.
НаблюдениеПервое измерениеЧто можно различить
Тормозит у всех, MSPT растётПрофиль во время этой нагрузкиСимуляцию сущностей, генерацию мира или работу плагина
Все ненадолго зависают, среднее TPS около 20Профиль длинных тиков со временем событияКороткие паузы, потерянные в среднем
Проблемы только у одного игрокаЕго ping, соединение и FPSСетевую задержку и локальную отрисовку
Minecraft пропадает или перезапускаетсяЖурналы службы и ядраОшибку JVM, нехватку памяти ОС или плановый перезапуск

Высокий ping может сопровождать медленную симуляцию. Одна метрика не исключает проблему в другом месте.

Снимите профиль нагрузки, которая вызывает лаги#

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

В чате Minecraft выполните:

text
/spark tps
/spark ping
/spark gc
/spark profiler start --timeout 600

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

Если профиль уже записывается, проверьте /spark profiler info; команда /spark profiler open открывает его, а /spark profiler stop заканчивает запись перед новым замером. В консоли команды вводятся без начального /. Синтаксис описан в справочнике команд. Команды сверены с документацией 12 октября 2026 года; реальный профиль работающего сервера в этой статье не приводится.

Читайте работу потока, а не самый большой процент#

В отчёте откройте Server thread и раскрывайте ветви, выполняющие игровую работу. Идите по крупным ветвям до названий классов или методов, объясняющих операцию. Имена меняются между версиями Minecraft: ищите саму работу, а не точную строку со старого скриншота.

Проценты относятся к времени выбранного потока, а не ко всему VPS. Время родительской ветви включает дочерние вызовы; складывать их нельзя. Ожидание или сон потока может означать, что работа закончена и он ждёт следующего тика. Для плагинов используйте представление Sources. Эти различия описаны в руководстве по просмотрщику spark.

Из найденной ветви сформулируйте проверку:

Заметная работа в профилеСледующее сравнениеВозможное изменение, если гипотеза подтвердилась
Генерация чанковТе же игроки на готовой базе и при исследовании новых местОграничить одновременное исследование или оценить предварительную генерацию
Сущности или block entitiesТа же активность с выключенной или выгруженной подозрительной фермойУменьшить активную нагрузку этой фермы
Плановая задача плагинаКопия сервера с отключённым одним плагиномИзменить расписание, настройки или заменить плагин
Нет явного узкого места игровой работыВремя зависаний и события GC/ОСПроверить память, I/O или планирование VM до изменения механик

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

Поймайте отдельные длинные тики#

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

text
/spark tickmonitor --threshold-tick 100
/spark profiler start --only-ticks-over 100 --timeout 600

В примере записываются тики дольше 100 мс. Если проблемные тики короче, уменьшите порог: это фильтр записи, а не допустимый уровень производительности. После проверки выключите монитор одним вызовом /spark tickmonitor. Метод разобран в инструкции spark по скачкам задержки.

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

Проверьте память и перезапуски на VPS#

-Xmx ограничивает Java heap. Процесс использует и нативную память, а ОС и другим приложениям нужен собственный запас. На Linux VPS выполните во время проблемы:

bash
free -h
vmstat 1 10
df -h

В free смотрите available: Linux может освободить часть кеша, поэтому низкое free ещё не доказывает нехватку RAM. В vmstat сравнивайте последующие строки со временем лагов; первая показывает средние показатели с загрузки ОС. Повторяющиеся значения si/so означают перемещение страниц в swap и обратно — повод исследовать давление на память. Поля описаны в руководствах free и vmstat.

df проверяет свободное место, а не задержку диска. Если место закончилось, сначала устраните это, прежде чем собирать новые профили и копии. Когда RAM уже не хватает, увеличение -Xmx может усилить конкуренцию. Если зависания совпадают с GC при достаточной памяти ОС, исследуйте создание объектов и настройку heap; начните с руководства Oracle по G1, а не случайного набора JVM-флагов.

Для службы minecraft из инструкции по установке на Ubuntu посмотрите интервал сбоя:

bash
sudo systemctl show minecraft -p NRestarts -p Result
sudo journalctl -u minecraft --since '30 minutes ago' --no-pager
sudo journalctl -k --since '30 minutes ago' --no-pager

Если служба называется иначе, подставьте её имя. Ищите OutOfMemoryError в журнале JVM, запись OOM-kill в журнале ядра, ошибки watchdog или явную остановку. Это разные причины. Счётчик перезапусков и исчезнувший процесс сами по себе не доказывают, что heap был слишком маленьким.

Проверьте одно изменение в сравнимых условиях#

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

Если преобладает симуляция мира, уменьшение simulation-distance может сократить работу, но повлияет и на дальние фермы. view-distance управляет другой частью нагрузки; проверьте справочник настроек, прежде чем менять их как взаимозаменяемые параметры. Запишите не только выигрыш по времени, но и изменение игрового поведения.

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

Панель Nexardo для своего VPS можно рассмотреть для организации администрирования. Изменения нагрузки и оборудования выбирайте по измерениям выше; наличие панели не является тестом производительности.

Для обращения за помощью приложите ссылку на профиль, время проблемы, версии Minecraft/Paper/Java, список плагинов, размер heap, количество игроков, действия для воспроизведения и уже проверенное изменение. Просмотрите отчёт и удалите секреты и адреса игроков из журналов перед отправкой. Так следующий человек сможет исследовать конкретную нагрузку, а не угадывать нужный объём RAM.

Источники#