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

71 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.