Снимите профиль во время лагов, найдите работу, которая занимает игровой поток, и проверьте одно изменение повторным замером. Разберём 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 выполните:
/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 до изменения механик |
Таблица предлагает гипотезы, а не диагноз по несуществующему отчёту. Проверяйте отключение плагинов на копии с резервным сохранением, через полную остановку и запуск, с теми же действиями. Отключение нескольких плагинов сразу затрудняет интерпретацию.
Поймайте отдельные длинные тики#
Если проблема выглядит как короткое зависание, а не постоянное замедление, закончите общий профиль и выполните:
/spark tickmonitor --threshold-tick 100
/spark profiler start --only-ticks-over 100 --timeout 600
В примере записываются тики дольше 100 мс. Если проблемные тики короче, уменьшите порог: это фильтр записи, а не допустимый уровень производительности. После проверки выключите монитор одним вызовом /spark tickmonitor. Метод разобран в инструкции spark по скачкам задержки.
Сопоставьте время сообщений с сохранениями мира, резервным копированием и периодическими задачами плагинов. Если видна связь, перенесите или отключите одну задачу в контролируемой проверке и повторите запись. Пустой профиль может означать, что проблема не возникла за время записи или порог был слишком высоким.
Проверьте память и перезапуски на VPS#
-Xmx ограничивает Java heap. Процесс использует и нативную память, а ОС и другим приложениям нужен собственный запас. На Linux VPS выполните во время проблемы:
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 посмотрите интервал сбоя:
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.




