Optymalizacja serwera Minecraft — paper.yml, spigot.yml i JVM flags
Lagi, spadki TPS i „Can't keep up!" — większość problemów z wydajnością rozwiązuje dobra konfiguracja Paper, Spigot i JVM. Zbieramy najważniejsze ustawienia w jedno kompletne kompendium.
Lagi, spadki TPS, przeciążony procesor i „Can't keep up!" to jedne z najczęstszych problemów właścicieli serwerów Minecraft. Wiele osób myśli, że jedynym rozwiązaniem jest kupno mocniejszego hostingu. W praktyce bardzo często ogromną różnicę daje odpowiednia optymalizacja serwera.
Dobrze skonfigurowany Paper potrafi obsłużyć znacznie więcej graczy przy tym samym sprzęcie niż źle ustawiony Vanilla lub Spigot. W tym poradniku zbieramy wszystko, co warto wiedzieć — od plików konfiguracyjnych po JVM flags.
Dlaczego serwer Minecraft laguje?
Minecraft działa głównie na jednym głównym wątku CPU. Procesor jest ważniejszy niż liczba rdzeni, słaba optymalizacja szybko powoduje spadki TPS, a duża liczba mobów i chunków bardzo obciąża serwer. Najczęstsze przyczyny lagów:
- za dużo entity,
- ogromne farmy mobów,
- nieoptymalne pluginy,
- zbyt wysoki view-distance,
- słabe JVM flags,
- źle ustawiony Paper lub Spigot,
- za mało RAM,
- wolny dysk VPS.
Dlaczego warto używać Paper zamiast Vanilla?
Paper to obecnie najpopularniejszy silnik serwera Minecraft. Działa szybciej niż Vanilla, posiada dodatkowe optymalizacje, pozwala konfigurować wydajność, obsługuje pluginy i daje większą kontrolę nad TPS. Większość nowoczesnych serwerów multiplayer działa właśnie na Paper, Purpur lub innych jego forkach.
Czym są TPS?
TPS (Ticks Per Second) to liczba „ticków" symulacji świata na sekundę. Maksymalna wartość w Minecrafcie to 20 TPS. Każdy tick wykonuje aktualizację mobów, redstone, bloków i graczy. Spadek poniżej 20 oznacza, że serwer nie nadąża — gracze widzą laggy, opóźnienia walki i błędy stawiania bloków.
Komendy /tps (Paper) lub /spark tps dają natychmiastowy wgląd w aktualną wartość. Towarzyszy temu metryka MSPT — średni czas wykonania jednego ticka w milisekundach. Wartości <50 ms = 20 TPS.
Ustawienia paper.yml (paper-world-defaults.yml)
Najważniejsze parametry w config/paper-world-defaults.yml:
chunks:
delay-chunk-unloads-by: 10s
entities:
spawning:
despawn-ranges:
monster:
soft: 28
hard: 96
per-player-mob-spawns: true
ticks-per:
hopper-transfer: 8
hopper-check: 8
squid-spawn-height:
maximum: 0.0
Najbardziej odczuwalne zmiany dają per-player-mob-spawns: true (sprawiedliwy spawn mobów) i podniesienie hopper-transfer/check (mniej overheadu hopperów).
Ustawienia spigot.yml
world-settings:
default:
entity-activation-range:
animals: 16
monsters: 24
raiders: 48
misc: 8
mob-spawn-range: 6
nerf-spawner-mobs: true
item-merge-radius: 4.0
exp-merge-radius: 4.0
Włączenie nerf-spawner-mobs: true sprawia, że moby ze spawnerów nie atakują (mniej obciążenia AI). item-merge-radius i exp-merge-radius łączą wypadnięte itemy i kule XP, zmniejszając liczbę entity.
Ustawienia server.properties
view-distance=6
simulation-distance=4
network-compression-threshold=256
sync-chunk-writes=false
view-distance=6 i simulation-distance=4 to świetny kompromis między widocznością a wydajnością. sync-chunk-writes=false wyłącza blokujące zapisy chunków — niewielkie ryzyko przy crashu, duża korzyść wydajnościowa.
JVM flags — Aikar Flags
Najpopularniejszy zestaw to Aikar Flags:
java -Xms6G -Xmx6G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-jar paper.jar --nogui
Ustaw -Xms równe -Xmx. G1GC z parametrami Aikara wyraźnie skraca zatrzymania GC i ogranicza skoki MSPT.
Pluginy pomocnicze
- spark — profilowanie CPU i pamięci, identyfikacja kosztownych pluginów.
- FarmLimiter — ogranicza liczbę zwierząt na chunk.
- ClearLag (z umiarem) — automatyczne czyszczenie itemów.
- Chunky — pre-generowanie świata przed otwarciem dla graczy.
Diagnostyka — co najpierw?
- Włącz
sparki zrób profilowanie podczas spadków TPS. - Sprawdź logi (
logs/latest.log) pod kątem ostrzeżeń o pluginach. - Wyłączaj pluginy po jednym, jeśli problem trudno namierzyć.
- Ogranicz liczbę zwierząt i hopperów w farmach.
- Pre-generuj świat — duża część lagów to ładowanie nowych chunków.
Podsumowanie
Optymalizacja serwera Minecraft to przede wszystkim dobry silnik (Paper), rozsądny RAM, sprawdzone JVM flags i przemyślane wartości w paper.yml/spigot.yml. Po dodaniu sparka i FarmLimitera większość serwerów na średniej klasy VPS bez problemu obsłuży 30–50 graczy.
Warto też pamiętać, że nawet najlepsza konfiguracja nie pomoże, jeśli sprzęt jest słaby albo serwer ma 50 nadaktywnych pluginów. Optymalizacja to proces — mierz, zmieniaj, mierz ponownie.