Files
DeltaZern/zernmc-config/README.md
T
SashegDev be3bfc2369
Build Delta / Build paperclip jar (push) Successful in 7m9s
perf(config): 2 chunk workers instead of 1, gen-parallelism on
worker-threads: -1 means "auto", and auto on 4 cores resolves to ONE worker.
MoonriseCommon.adjustWorkerThreads halves availableProcessors and then, if the
result is <= 4, collapses it further - 4/2=2, and 2<=3 becomes 1. That single
thread generated the spawn region serially.

Measured on zern.cc (4 vCPU, 8 GB), same jar, same flags, cold world vs warm:

                    before   after
  cold, overworld     6770ms  2944ms
  cold, nether        1368ms   888ms
  cold, total         38.5s   24.9s
  warm, overworld     1084ms   803ms
  warm, total         16.4s   12.2s

gen-parallelism "default" already resolved to true at startup, so it is now
spelled out rather than left to string comparison at boot.

3 workers is deliberately NOT set here. The main thread plus Netty share the
same 4 cores, and going to 3 trades main-thread headroom for generation that
does not happen every tick. That needs a profile, not a guess.

Also recorded the corollary: player-max-concurrent-chunk-generates is a rate
limiter, not an accelerator. Speeding up generation without raising it just
makes the engine faster behind a throttle that was sized for the old speed.
2026-10-03 11:58:59 +00:00

4.7 KiB
Raw Blame History

ZernMC configs

Тюнинг под профиль: 4 vCPU / 8 GB RAM, 30–40 игроков, боевой сервер с плагином, который спавнит много Display/Marker сущностей и частиц (BlackKnife как референс).

Все файлы парциальные — Paper/Spigot дополняет недостающие ключи дефолтами, поэтому их можно копировать поверх существующих конфигов.

Куда класть

Файл Путь на сервере
spigot.yml <сервер>/spigot.yml
paper-world.yml <сервер>/<мир>/paper-world.yml — у каждого мира свой
paper-global.yml <сервер>/config/paper-global.yml
server.properties.patch ключи из него в <сервер>/server.properties

Что где меняем и зачем

spigot.yml

  • view-distance 8 / simulation-distance 5 — на 4 ядрах это самый ощутимый рычаг: симуляция шириной 10 стоит в разы дороже 5.
  • entity-tracking-range.display 128 → 48 — главный фикс. Display, ItemDisplay, TextDisplay, Marker шлются игрокам пачками; при спаме боеспособностей 128 это десятки пакетов на тик.
  • misc 96 → 48, other 64 → 32, animals/monsters 96 → 64, players 128 → 96 — то же, но по остальным типам.
  • entity-activation-range — сужаем радиусы, в которых сущности вообще тикают; tick-inactive-villagers: false — самый частый выигрыш.
  • ticks-per.hopper-check 1 → 8 — хопперы по умолчанию проверяются каждый тик, 8 экономит заметно и не ломает фермы.
  • merge-radius.item 0.5 → 2.5 — меньше сущностей-дропа на земле.
  • item-despawn-rate 6000 → 3000, arrow-despawn-rate 1200 → 300.
  • mob-spawn-range 8 → 6, max-tnt-per-tick 100 → 30.

paper-world.yml

  • misc.redstone-implementation: ALTERNATE_CURRENT — быстрее распространение редстоуна. Ломает 0-tick и двери-контры, предупредить игроков перед включением.
  • tick-rates — рост травы, обновление контейнеров, спавнеры в 3 тика.
  • collisions.max-entity-collisions 8 → 5.
  • environment.disable-thunder, optimize-explosions, max-block-ticks/max-fluid-ticks пополам.
  • hopper.disable-move-event: true — ломает плагины, слушающие InventoryMoveItemEvent (авто-сортировки, economy-логики).
  • entities.spawning.spawn-limits — потолок мобов на чанк.

paper-global.yml

  • chunk-system.worker-threads: 2 — самый недооценённый рычаг. auto (-1) на 4 ядрах даёт 1 воркер, и генерация чанков идёт последовательно: Moonrise делит availableProcessors пополам, а на результате 2 опускается до 1, оставляя место главному треду. Замерено: холодный старт 38.5 → 24.9 с, тёплый 16.4 → 12.2 с. Значение 3 — только с профилем, главному треду на 4 ядрах нужно дышать.
  • chunk-system.io-threads: 2, gen-parallelism: true.
  • chunk-loading.advanced.player-max-concurrent-chunk-loads/generates — защита от флуда генерацией при скоростном облёте. При ускорении генерации этот потолок надо поднимать, иначе движер быстрее, а ограничитель остался прежним.

Что НЕ трогаем

  • Moonrise (чанковая система) — уже многопоточный, отдельный патч не нужен.
  • wake-up-inactive.* — баланс, не перф.

Порядок применения

  1. Остановить сервер.
  2. Скопировать файлы.
  3. paper-world.yml положить в каждый мир: world/, world_nether/, world_the_end/.
  4. Старт → в логе не должно быть Error occurred while loading по этим файлам.
  5. Проверить: /paper entity (tracking ranges), spark для TPS/MSPT.