spark — это профайлер для Minecraft-серверов. Если сервер дергается, spark за секунды покажет тебе, страдает ли тикрейт, какие плагины или фермы съедают время и упирается ли CPU или память в лимит. Этот гайд показывает три команды, которые тебе действительно нужны, и объясняет, как читать цифры. Скриншоты сделаны на тестовом сервере с Paper 1.21.4.

Установка

spark работает как плагин на Paper и Spigot и как мод на Fabric, NeoForge и Forge. В панели ты найдешь его в разделе Plugins → Browser. Настройка не нужна. Команды стоит выдать группе модераторов; нужный узел называется spark. Как его назначить, описано в LuckPerms: настроить права.

Первый взгляд: TPS и длительность тика

/spark tps показывает три строки:

Вывод /spark tps: TPS, длительность тиков и загрузка CPU
Вывод /spark tps: TPS, длительность тиков и загрузка CPU
  • TPS (тики в секунду) за последние 5 секунд, 10 секунд, 1, 5 и 15 минут. 20,0 — максимум. Примерно до 19 игроки еще ничего не замечают, ниже 15 животные двигаются рывками, ниже 10 сервер становится неиграбельным.
  • Длительность тика как минимум, медиана, 95-й перцентиль и максимум в миллисекундах. Один тик может длиться 50 мс, чтобы удерживать 20 TPS. На изображении медиана равна 2,4 мс; значит, у сервера большой запас. Важнее всего 95-й перцентиль: если он близок к 50 мс, появляются рывки, даже если среднее значение выглядит хорошо.
  • Загрузка CPU отдельно для системы (вся машина) и процесса (только твой сервер). На арендованном сервере важен показатель процесса.

/spark healthreport собирает те же значения вместе с памятью и диском в один отчет.

Профайлер: кто съедает время?

Когда TPS проседает, запускай профайлер:

/spark profiler start

spark подтвердит запуск и продолжит работать в фоне. Дай ему поработать минимум минуту, пока проблема проявляется, затем:

/spark profiler stop
Профайлер работает в фоне; spark показывает команды для просмотра, остановки и отмены
Профайлер работает в фоне; spark показывает команды для просмотра, остановки и отмены

При остановке spark загрузит отчет на spark.lucko.me и выдаст ссылку. Отчет не содержит имен игроков, IP-адресов и сообщений чата, а только деревья вызовов Java-процесса. /spark profiler open открывает его уже во время работы, /spark profiler cancel отбрасывает его без загрузки.

В отчете раскрывай дерево сверху вниз. Обычно ты находишь такие вещи:

  • Тики сущностей определенного типа: ферма с сотнями животных или предметов. Уменьши ферму или успокой ее через entity-activation-range в paper-world-defaults.yml.
  • Плагин в Event-Listener: обнови плагин, проверь конфигурацию или замени его.
  • Загрузка чанков из-за игроков, которые быстро летают: снизь дальность прорисовки или предварительно сгенерируй мир через Chunky.
  • Редстоун-часы: схема, которая никогда не останавливается. Попроси игрока выключить ее.

Garbage Collection и память

/spark gc показывает, как часто и насколько долго Java-сборка мусора ставит сервер на паузу. Много долгих пауз означает слишком мало RAM или утечку памяти в плагине. /spark heapsummary перечисляет, какие типы объектов занимают память. Перед тем как докупать RAM, стоит заглянуть сюда: часто проблему решает обновление плагина.

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

  • TPS 20, но лаги все равно есть. Проблема на клиенте или в сети. /spark ping показывает задержку по каждому игроку.
  • Забыл ссылку на профайлер. /spark profiler без аргументов показывает статус; после остановки ссылка также остается в консоли сервера.
  • Цифры без сравнения. Один показатель TPS сам по себе говорит мало. Один раз измерь значения на пустом сервере как эталон.

FAQ

С какого значения TPS игроки что-то замечают?

Примерно до 19 TPS ничего не бросается в глаза. Ниже 15 животные и снаряды двигаются рывками, ниже 10 сервер становится неиграбельным. При этом смотри не столько на среднее значение, сколько на 95-й перцентиль длительности тика: если он близок к 50 мс, будут рывки, даже если средний TPS выглядит хорошо.

Содержит ли отчет spark личные данные моих игроков?

Нет. Отчет состоит из деревьев вызовов Java-процесса и не содержит имен игроков, IP-адресов или сообщений чата. Если ты все равно не хочешь ничего загружать, отбрось запуск через /spark profiler cancel или прочитай его прямо в игре через /spark profiler open.

Как долго должен работать профайлер?

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

Поможет ли больше RAM от лагов?

Только если причина в сборке мусора. /spark gc показывает частоту и длительность Java-пауз, /spark heapsummary — типы объектов, занимающие память. Часто за этим стоит один конкретный плагин, и обновление решает проблему дешевле, чем дополнительная RAM.

TPS держится на 20, а все равно дергается — что теперь?

Значит, дело не в серверном тике, а в клиенте или сети. /spark ping показывает задержку по каждому игроку. Если это касается только отдельных игроков, причина в их подключении; если всех, проверь дальность прорисовки и частоту кадров на клиенте.

Дополнительные гайды

Предварительная генерация мира снимает с сервера загрузку чанков: Chunky: предварительно сгенерировать мир. Как панель постоянно сообщает о низком TPS, описано в Лаги Minecraft-сервера: TPS и Watchdog.

Источники