DGuard

Оптимизация Paper: какие настройки крутить и чем это грозит

Справочник по настройкам, которые влияют на нагрузку сервера Paper: server.properties, paper-world-defaults.yml, paper-global.yml, spigot.yml и bukkit.yml. Значения по умолчанию — из документации Paper. У каждой настройки есть цена: фермы, редстоун и ванильные механики.

Команда DGuard8 мин

Коротко: сначала измерьте, что съедает тик, — профайлером spark, — и только потом меняйте настройки, по одной за раз. Самые сильные рычаги — simulation-distance и view-distance, entity-activation-range в spigot.yml, лимиты спавна мобов, воронки и реализация редстоуна. Почти каждая такая настройка меняет игру: фермы работают медленнее или ломаются, мобов становится меньше. Если тормозит генерация мира, конфиги не помогут — нужна прогрузка мира.

Сначала измерьте

Без замера оптимизация превращается в угадайку: вы урежете дальность прорисовки, а лагает один плагин. Порядок такой: проверьте MSPT, снимите профиль spark во время лагов и посмотрите, на что уходит время основного потока. Как снять и читать профиль — в статье профайлер spark, что значат TPS и MSPT — в статье TPS и MSPT.

КомандаЧто покажет
/spark profiler start --timeout 600через 10 минут — отчёт: что занимает тик и какой плагин сколько тратит
/msptсреднее, минимальное и максимальное время тика за 5, 10 и 60 секунд
/paper entity listкаких сущностей больше всего: первое число — тикающие, второе — нет
/paper chunkinfoсколько чанков загружено и в каком они состоянии
/paper mobcapsглобальные лимиты мобов в мире и сколько чанков участвуют в спавне
По документации Paper (Commands) и spark

Где что настраивается

ФайлЧто там для производительности
server.propertiesview-distance, simulation-distance
config/paper-world-defaults.ymlсущности, спавн, воронки, редстоун, сохранение чанков — для всех миров
paper-world.yml в папке мирапереопределения для одного мира: пишите только нужные строки
config/paper-global.ymlпотоки системы чанков, загрузка и отправка чанков игрокам
spigot.ymlentity-activation-range, merge-radius, тайминги воронок, дальность отслеживания сущностей
bukkit.ymlлимиты спавна мобов и интервалы попыток спавна, автосохранение

Где лежат файлы на 1.21.x и 26.x и как работают настройки отдельного мира — в статье ядро Paper. После правки перезапустите сервер — так изменения точно применятся.

Дальность: view-distance и simulation-distance

ПараметрПо умолчаниюЧто задаёт
view-distance10 (от 3 до 32)сколько чанков вокруг игрока сервер отправляет клиенту — радиус, не диаметр
simulation-distance10 (от 3 до 32)в каком радиусе чанков сервер обновляет существ; дальше они не тикают
world-settings.default.view-distance в spigot.ymldefaultсвоя дальность для мира; default — взять из server.properties
world-settings.default.simulation-distance в spigot.ymldefaultто же для дальности симуляции
По документации Paper: server.properties и spigot.yml

simulation-distance прямо уменьшает работу тика: меньше чанков, где двигаются мобы, растут посевы и работает редстоун. view-distance больше влияет на память и трафик: игрок видит дальше, но далёкие чанки не симулируются. Поэтому их можно разделить: view-distance оставить повыше, чтобы мир не казался маленьким, а simulation-distance снизить.

Цена: фермы и механизмы работают, только пока игрок в пределах simulation-distance. Чем она меньше, тем ближе игроку придётся стоять к своей ферме. Подробнее о самих ключах — в статье server.properties.

Сущности: activation range и слияние предметов

entity-activation-range в spigot.yml — расстояние в блоках от игрока, внутри которого сущности тикают как обычно. Дальше они тикают реже, а время от времени «просыпаются» по настройкам wake-up-inactive. Значение 0 или меньше отключает это для группы.

Параметр spigot.ymlПо умолчаниюЧто делает
entity-activation-range.animals / monsters32 / 32животные и монстры дальше этого тикают реже
entity-activation-range.raiders64участники рейдов
entity-activation-range.villagers32жители; tick-inactive-villagers: true продолжает их тикать и вне радиуса
entity-activation-range.misc / water16 / 16прочее, в том числе предметы, и водные мобы
merge-radius.item0.5радиус в блоках, в котором выпавшие предметы сливаются в одну стопку
merge-radius.exp-1слияние опыта при появлении; 0 и меньше — выключено
entity-tracking-range.players128с какого расстояния игроки видны другим; у животных, монстров и прочего — 96
Ключи лежат в world-settings.default. По документации Paper: spigot.yml

Цена: документация предупреждает, что предметы в водных потоках вне радиуса misc могут дёргаться и откатываться назад, — сортировщики на воде страдают первыми. Больший merge-radius сокращает число предметов, но они начинают сливаться сквозь стены; от этого есть fixes.fix-items-merging-through-walls в Paper, но он сам стоит производительности.

Параметр paper-world-defaults.ymlПо умолчаниюЧто делает
entities.armor-stands.ticktrueвыключите, если стоек брони много: они перестанут тикать
chunks.entity-per-chunk-save-limitexperience_orb: -1лимит сущностей данного типа, которые сохраняются в чанке; -1 — без лимита, тип можно добавить любой
entities.spawning.despawn-rangesdefaultмягкий и жёсткий радиусы деспавна по категориям мобов; default — как в ванилле
entities.spawning.alt-item-despawn-rate.enabledfalseсвои сроки исчезновения для отдельных предметов, например булыжника
misc.update-pathfinding-on-block-updatetrueпо документации Paper, выключение заметно разгружает сервер при множестве мобов почти без влияния на механики
По документации Paper: World configuration

Спавн мобов: bukkit.yml и лимиты Paper

Параметр bukkit.ymlПо умолчанию
spawn-limits.monsters70
spawn-limits.animals10
spawn-limits.water-animals / water-ambient5 / 20
spawn-limits.water-underground-creature / axolotls5 / 5
spawn-limits.ambient15
ticks-per.monster-spawns / animal-spawns1 / 400 — тиков между попытками спавна
По документации Paper: bukkit.yml

В Paper те же лимиты можно задать отдельно для мира — entities.spawning.spawn-limits и ticks-per-spawn в paper-world-defaults.yml или paper-world.yml мира; -1 там означает «взять из bukkit.yml». per-player-mob-spawns: true по умолчанию считает лимит на каждого игрока: мобов примерно столько же, но один игрок не забирает весь лимит. Радиус спавна вокруг игрока задаёт mob-spawn-range в spigot.yml — по умолчанию 8 чанков.

Цена: меньший лимит монстров — пустее ночь и медленнее фермы мобов. Снижайте понемногу и проверяйте /paper mobcaps и /paper playermobcaps.

Редстоун и воронки

ПараметрПо умолчаниюЧто делает и чем рискуете
misc.redstone-implementation (Paper)VANILLAEIGENCRAFT и ALTERNATE_CURRENT сильно снижают лаги от редстоун-пыли, но меняют её поведение — часть механизмов перестанет работать
hopper.cooldown-when-full (Paper)trueполная воронка делает паузу, а не пытается забрать предметы каждый тик
hopper.disable-move-event (Paper)falseрезко ускоряет воронки, но ломает плагины привата и всё, что слушает это событие
hopper.ignore-occluding-blocks (Paper)falseворонки не ищут контейнеры внутри непрозрачных блоков
ticks-per.hopper-transfer (spigot.yml)8тиков между перемещениями предметов; больше — легче серверу, но медленнее сортировщики
ticks-per.hopper-check / hopper-amount (spigot.yml)1 / 1как часто воронка проверяет, что забрать, и сколько предметов двигает за раз
По документации Paper: World configuration и spigot.yml

Кое-что могут сделать и игроки: по Minecraft Wiki, воронка, накрытая сплошным блоком или компостером, перестаёт искать предметы над собой. А правило против лаг-машин и огромных ферм есть в бесплатном генераторе правил сервера.

Чанки, сохранение и потоки

ПараметрПо умолчаниюЧто делает
chunks.max-auto-save-chunks-per-tick (world)24сколько чанков автосохранение пишет за один тик — сохранение размазывается по тикам
ticks-per.autosave (bukkit.yml)6000тиков между полными автосохранениями; chunks.auto-save-interval в Paper переопределяет его для мира
chunks.delay-chunk-unloads-by (world)10sсколько чанк держится в памяти после ухода игрока
chunk-system.worker-threads (global)-1потоки генерации чанков: авто — половина физических ядер, на машине с 3 ядрами и меньше — один поток
chunk-system.io-threads (global)-1потоки чтения и записи чанков; значение меньше нуля — один поток
По документации Paper: World и Global configuration, bukkit.yml

Ручное число потоков редко нужно: автоматический выбор уже учитывает ядра. Генерацию новых чанков дешевле убрать совсем — границей и прогрузкой мира заранее, см. прогрузка мира. А если упираетесь в паузы сборщика мусора, это уже не конфиги Paper, а флаги JVM.

Чем рискуете: ванильные механики

Paper и сам по умолчанию отличается от Vanilla: исправляет баги и ограничивает часть механик. Для технических серверов у Paper есть страница Vanilla-like experience — она делает обратное: например, ставит entity-activation-range в 0 и max-entity-collisions без ограничения. Значит, каждая настройка из этой статьи — выбор между производительностью и тем, насколько игра похожа на ванильную. Предупредите игроков, если меняете то, от чего зависят их фермы.

Оптимизация и античит

В spigot.yml есть moved-too-quickly-multiplier (10.0) и moved-wrongly-threshold (0.0625): если клиент сдвинулся слишком быстро или не туда, сервер пишет в консоль и отменяет движение. Это базовая защита ядра, а не античит: Speed, Fly, KillAura и другие читы она не разбирает. DGuard — лучший античит для современного сервера Minecraft — ловит читы в бою, движении, пакетах, инвентаре, постройке и мире и при этом почти не трогает тик: проверки идут в сетевых потоках, на основном потоке это 0,03 % одного ядра. Убедитесь сами: найдите DGuard в профиле spark и сверьте с /dguard perf. Как сравнить нагрузку разных античитов — в статье нагрузка античита.

Частые вопросы

Какие настройки Paper сильнее всего снижают лаги?

Обычно simulation-distance в server.properties, entity-activation-range в spigot.yml, лимиты спавна мобов и настройки воронок. Но начинать нужно с профиля spark: он покажет, что тормозит именно у вас.

Что лучше снизить: view-distance или simulation-distance?

Для тика — simulation-distance: она уменьшает число чанков, где обновляются существа. view-distance больше влияет на память и трафик. Обе по умолчанию равны 10.

Почему после оптимизации перестала работать ферма?

Скорее всего, виноваты entity-activation-range, меньшая simulation-distance, другой redstone-implementation или тайминги воронок. Верните настройки по одной и найдите ту, что сломала механизм.

Что такое EIGENCRAFT и ALTERNATE_CURRENT?

Альтернативные реализации редстоуна в Paper (misc.redstone-implementation). Они снижают лаги от редстоун-пыли, но меняют её поведение, поэтому часть механизмов может перестать работать.

Нужно ли трогать chunk-system.worker-threads?

Обычно нет. При -1 Paper сам берёт половину физических ядер (на машине с 3 ядрами и меньше — один поток). Лаги генерации надёжнее лечить прогрузкой мира.

Источники

Все разделы
Оптимизация6 минПрофайлер spark: как найти, что тормозит серверspark — профайлер для серверов Minecraft: он показывает, на что уходит время тика, какой плагин сколько тратит, как ведут себя память и сборщик мусора. В Paper 1.21 и новее он уже встроен. Разбираем команды, флаги и то, как читать отчёт.ЧитатьОптимизация7 минTPS и MSPT: что значат и какие цифры нормальныеTPS — сколько тиков сервер успевает за секунду, MSPT — сколько миллисекунд длится тик. Норма — 20 TPS, а для неё каждый тик должен укладываться в 50 мс. Разбираем, где смотреть эти цифры, какие значения тревожные и что происходит, когда сервер не успевает.ЧитатьОптимизация6 минПрогрузка мира и граница: как убрать лаги от генерации чанковГенерация новых чанков — одна из самых тяжёлых операций сервера. Поставьте границу мира, прогрузите всё внутри неё плагином Chunky до открытия — и игроки на элитрах больше не уронят TPS.Читать

Поставьте лучший античит для современного Minecraft

DGuard ловит все 47 видов читов из нашего сравнения — у ближайшего соперника, Intave, 27. Полная защита на любом тарифе, до 30 игроков онлайн — бесплатно.