Главная Статьи Лаги сервера Minecraft: как найти виновника через spark и timings

Лаги сервера Minecraft: как найти виновника через spark и timings

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

Лаги сервера Minecraft: как найти виновника через spark и timings

«Сервер лагает» обычно означает одно из трёх: не успевает сам сервер, у игрока слабый компьютер или плохая связь. Чинить на сервере можно только первое. Ниже порядок, как отличить одно от другого и найти виновника профилировщиком, а не перебором плагинов.

Сначала понять, чей это лаг

Что видят игрокиСкорее всегоЧем проверить
Мобы дёргаются, сломанные блоки возвращаются, сундуки открываются с задержкой у всехсервер не успевает тик/tps, /mspt
Картинка рвётся у одного, у остальных плавнокомпьютер игрокаFPS на экране F3
Одного игрока откидывает назадего связьпинг в табе
Короткий фриз раз в несколько минутсборка мусора или автосохранение/spark health, /spark gc
Лагает в одном месте картыферма, редстоун, толпа мобовпрофиль и подсчёт сущностей

Сервер должен делать 20 тиков в секунду, то есть тратить на тик не больше 50 мс. В Paper и Purpur /tps показывает среднее за 1, 5 и 15 минут, а /mspt время тика. Если TPS 20 и MSPT заметно ниже 50, сервер справляется, ищите причину у игрока.

Снимаем профиль spark

spark показывает, на что уходит время основного потока сервера. В свежих сборках Paper он уже встроен, на старых ставится как обычный плагин. Нужны права spark или оператор.

  1. Дождитесь лага. Профиль на пустом сервере в шесть утра ничего не покажет.
  2. Запустите профилировщик.
  3. Подождите 2–5 минут, чтобы лаг повторился несколько раз.
  4. Остановите. spark выдаст ссылку на отчёт, он открывается в браузере.
/spark profiler start
/spark profiler stop

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

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

Как читать отчёт

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

  • Имя плагина или его пакет вроде com.автор.плагин. Время ест плагин. Смотрите глубже, что именно: обработчик события, задача по таймеру, запрос к базе в основном потоке.
  • Тики сущностей. Много мобов, предметов на земле, стоек для брони, вагонеток.
  • Воронки и редстоун. Механизмы игроков. Дальше ищите место на карте.
  • Загрузка и генерация чанков. Игроки бегут по новым землям. Помогают предгенерация и граница мира, об этом в статье про хостинг и память.
  • Сохранение мира. Автосохранение упирается в медленный диск.

Смотрите на долю времени, а не на то, как часто имя мелькает. Плагин на 3 % это фон. Плагин, который в лаговых тиках занимает половину, подозреваемый номер один.

Другие команды spark

КомандаЧто показывает
/spark tpsTPS и время тика за разные периоды, загрузку процессора
/spark healthсводку: TPS, MSPT, процессор, память, диск
/spark tickmonitorсообщает в чат о тиках, которые заметно дольше обычных
/spark gcсколько раз и как долго работала сборка мусора
/spark heapsummaryчем занята память, если её не хватает

Когда нужны timings

Timings это старый встроенный отчёт Spigot и Paper. В новых версиях Paper он объявлен устаревшим и убран в пользу spark. Если ядро старое и spark по какой-то причине не встаёт, отчёт снимается так:

/timings on
(подождать несколько минут под нагрузкой)
/timings paste

Timings меряет крупными блоками: плагин, событие, задача. spark видит глубже, до конкретного метода. Если выбор есть, берите spark.

Нашли причину в мире

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

/execute if entity @e[type=minecraft:item]
/execute if entity @e[type=minecraft:villager]

В ответе будет число. Вместо item и villager подставьте armor_stand, minecart, hopper_minecart. В Paper есть /paper entity list, она показывает сущности по типам и самые забитые чанки. Дальше телепорт туда и разговор с владельцем фермы.

Типичные ошибки

  • Профиль без лага. Снятый в тихое время отчёт показывает, что всё хорошо.
  • Удаление плагинов наугад. Пять удалили, лаг остался, а игроки потеряли половину функций.
  • /kill @e без типа. Убьёт жителей, питомцев, стойки, рамки и заодно игроков.
  • Лечение памятью. Если тик долгий из-за фермы, лишние гигабайты не помогут. Память добавляют, когда spark показывает, что её не хватает и сборка мусора идёт без остановки.
  • Плагины-чистильщики. Удалять всё с земли раз в минуту значит лечить симптом и злить игроков.
  • Путаница с пингом. TPS 20, а один игрок жалуется. Сервер тут ни при чём.

Как то же сделать быстрее

Профиль снимает spark, и Cloud Panel его не заменяет. Она убирает беготню вокруг. На главном экране видно, работает ли сервер и сколько игроков онлайн, рядом загрузка диска и памяти машины. Команды spark отдаются из консоли в том же окне, без входа в игру и без SSH.

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

Чек-лист

  1. Понятно, лагает сервер или игрок: проверены /tps и /mspt.
  2. Профиль снят в момент лага, 2–5 минут.
  3. В отчёте открыт Server thread, найден узел с наибольшей долей.
  4. Виновник назван: плагин, сущности, механизм, чанки или сохранение.
  5. Если это место в мире, оно найдено по числу сущностей.
  6. Изменение одно за раз, после него новый профиль.
  7. TPS держится 20 вечером, когда онлайн максимальный.

Консоль, состояние сервера и выключение плагина кнопкой в одном окне: 3 дня бесплатно.

Не хотите собирать всё это руками?

Мы делаем сборки, плагины и сайты для серверов Minecraft с 2022 года. Готовое решение ставится на ваш хостинг за вечер, установку делаем бесплатно.