spark — это профайлер для Minecraft-серверов. Если сервер дергается, spark за секунды покажет тебе, страдает ли тикрейт, какие плагины или фермы съедают время и упирается ли CPU или память в лимит. Этот гайд показывает три команды, которые тебе действительно нужны, и объясняет, как читать цифры. Скриншоты сделаны на тестовом сервере с Paper 1.21.4.
Установка
spark работает как плагин на Paper и Spigot и как мод на Fabric, NeoForge и Forge. В панели ты найдешь его в разделе Plugins → Browser. Настройка не нужна. Команды стоит выдать группе модераторов; нужный узел называется spark. Как его назначить, описано в LuckPerms: настроить права.
Первый взгляд: TPS и длительность тика
/spark tps показывает три строки:

- 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.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.
Источники
- Документация spark: https://spark.lucko.me/docs/
- Команды: https://spark.lucko.me/docs/Command-Usage
- Как читать отчеты профайлера: https://spark.lucko.me/docs/guides/Finding-lag-spikes