Poradnik został przygotowany dla wersji 1.15.2. Jeśli używasz starszej, część opcji może nie być dostępna!

Wydajność Minecrafta po aktualizacjach 1.13 oraz 1.14 dość mocno spadła. Dlatego osoby, zwłaszcza na hostingach lub słabszych VPS mogą odczuwać zwiększone spadki grywalności. W tym poradniku opiszę krok po kroku, jak poprawić wydajność na serwerze Minecraft.

Użyta terminologia

W tym poradniku znajdziesz trochę terminologii związanej z serwerem Minecraft. Tutaj znajdziesz wyjaśnienie najważniejszych wzrotów.

  • Despawn - Usunięcie entity z mapy. Dzięki niemu serwer może w razie potrzeb zdobyć trochę wolnych zasobów.
  • Entity - Każdy byt niebędący blokiem. Do nich zaliczamy: zwierzęta, potwory, obrazy, ramki na przedmioty, graczy, itp…
  • Tile (entity)- Są to bloki, które przechowują informacje. Do nich zaliczamy: skrzynki, tabliczki, banery, itp…
  • Tick - Najmniejsza jednostka czasu/zmian w Minecraft. 1 sekunda przy pełnej wydajności serwera powinna być równa 20 tickom.
  • Chunk - Część świata gry o wymiarach: Długość i szerokość 16 bloków, wysokość 256 bloków.
  • Block Update - aktualizacja bloku polegająca na ponownym obliczeniu jego stanu, np. podczas łączenia płotków, czy redstone.
  • Timings - System sprawdzania obciążenia serwera. Paper i Sponge używają timingów w wersji 2. Przykładowe Timingi dostępne są na https://timings.aikar.co/

Wybór silnika

Jest to jedna z podstawowych rzeczy odpowiedzialna za wydajność. Aktualnie najlepszym wyborem, jeśli chodzi o silniki wspierające pluginy Bukkita/Spigota jest Paper. Jest on zoptymalizowanym forkiem (modyfikacją) Spigota, dzięki czemu 99% pluginów będzie tam działać bez problemu. Zawiera on wiele poprawek do działania serwera, naprawia wiele błędów oraz daje nam większą możliwość zmian działania serwera. Aby go zainstalować, pobierz najnowszą wersję z https://papermc.io/downloads, a następnie podmień swój stary silnik.

Przygotowanie mapy

Ten krok jest ważny zwłaszcza na serwerach, z granicą (borderem) świata większym niż obszar samego spawnu (Survival, Creative, Gildie itp.). Chcąc jak najbardziej zwiększyć wydajność na takich serwerach, należy przed (lub już po) jego publicznym starcie wygenerować całą mapę. Aby to zrobić, należy:

  • Pobrać i zainstalować plugin WorldBorder
  • Wyznaczyć wielkość mapy, używając komendy /wb setcorners,
  • Wygenerować mapę używając /wb fill,
  • Poczekać aż mapa się wygeneruje. W zależności od mocy maszyny, ustawień WorldBordera oraz wielkości mapy, może to zająć od paru minut do nawet parunastu godzin.

Flagi startowe oraz wersja Javy

Jeśli twój serwer znajduje się na VPS, zalecane jest użycie flag startowych autorstwa Aikara (jeden z twórców Papera). Więc jeśli nasz serwer startowaliśmy tak:

java -Xmx10G -jar server.jar

To powinniśmy zmienić tp na

java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=8 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=true -Daikars.new.flags=true -jar server.jar nogui

Gdzie ilość pamięcy ram możemy zmienić dowolnie (ale nie zalecam niczego poniżej 2GB, ale też powyżej 12, zwłaszcza na małych serwerach).

Trzeba pamiętać, aby nie przypisać za dużej ilości pamięci. Jeśli mamy VPS z ~8GB, to powinniśmy dla bezpieczeństwa przypisać tylko 6-7. Jeśli nasz serwer dalej będzie crashował z powodu niedoboru pamięci (Out of Memory), należy jeszcze bardziej zmniejszyć tę wartość.

Co do wyboru Javy, to zalecam użycie OpenJDK 11 Hotspot.

Konfiguracja serwera

Jeśli powyższe zmiany nie pomogły wystarczająco, musisz zmienić wartości w plikach server.properties, bukkit.yml, spigot.yml oraz paper.yml. Tutaj znajdzesz zalecane zmiany

server.properties

view-distance

  • Zalecana wartość: 8 lub mniej (jeśli serwer dalej laguje)
  • Zmniejsza view distance, dzięki czemu serwer będzie miał mniej chunków zajmujących zasoby. Mniejsze wartości mogą jednak wpłynąć na negatywnie na jakość rozgrywki w niektórych trybach.

Bukkit.yml

spawn-limits

  • Zalecane wartości: monsters:25, animals:10, water-animals:4, ambient:0
  • Odpowiada za maksymalną ilość mobów na świecie. Te wartości mogą wydawać się małe, ale jeśli zmienimy jej działanie na limit na 1 gracza, to ich ilość powinna być wystarczająca.

chunk-gc.period-in-ticks

  • Zalecane wartość: 400
  • Zmniejszając tą wartość, nieużywane chunki będą usuwane szybciej z pamięci, dzięki czemu serwer nie będzie tracił na nie mocy obliczeniowej.

ticks-per.monster-spawns

  • Zalecana wartość: 3
  • Zwiększa czas (w tickach) pomiędzy spawnowaniem się potworów, jeśli w timingsach mobSpawn, zabiera większą ilość czasu, należy zwiększyć tę wartość.

Spigot.yml

mob-spawn-range

  • Zalecana wartość: 6 lub mniej
  • Odpowiada za obszar wokół gracza, na którym będą spawnowały się moby. Jeśli nasz view distance jest mniejszy od 7, należy ustawić tę wartość na liczbę o 1 mniejszą.

entity-activation-range

  • Zalecane wartości: animals:16, monsters:24, raiders: 48, misc:8
  • Entity poza wyznaczonym obszarem będą tickowane rzadziej, dzięki czemu serwer będzie potrzebował na nie mniej mocy obliczeniowej. Mniejsze wartości mogą popsuć działanie mobów.

tick-inactive-villagers

  • Zalecana wartość: false
  • Wyłącza tickowanie osadników będących poza obszarem aktywnego tickowania. Jest to dodatkowo przydatne, jeśli na serwerze masz dużo osadników.

merge-radius

  • Zalecane wartości: item:4.0, exp:6.0
  • Zmienia obszar łączenia się przedmiotów, dzięki czemu ich ilość może znacznie spaść.

Paper.yml

max-auto-save-chunks-per-tick

  • Zalecana wartość: 6, 8 na większych serwerach,
  • Odpowiada za ilość zapisanych chunków podczas 1 ticka.

optimize-explosions

  • Zalecana wartość: 2 (lub więcej, jeśli masz sporą ilość spawnerów)
  • Zwiększa czas między próbami zespawnowania moba przez spawner.

disable-chest-cat-detection

  • Zalecana wartość: false
  • Usuwa mechanikę blokady skrzyń, na których siedzi kot. Minimalnie zmniejsza obciążenie serwera.

container-update-tick-rate

  • Zalecana wartość: 2/3
  • Zmienia częstotliwość (w tickach) odświeżania ekwipunku. Wartości powyżej 4 mogą wywoływać błędy wizualne.

max-entity-collisions

  • Zalecana wartość: 2
  • Zmniejsza ilość maksymalnych kolizji (zwłaszcza w farmach, griderach, itp.), dzięki czemu serwer zajmuje to mniej czasu.

grass-spread-tick-rate

  • Zalecana wartość: od 1 do 4
  • Zwiększa czas (w tickach) między rozrostem trawy. W zależności od trybu może utrudnić rozgrywkę.

despawn-ranges

  • Zalecane wartości: soft: 28, hard: 96
  • Zmniejsza odległość moba od gracza, potrzebną do jego despawnowania. Zmniejsza to ilość mobów, którymi gracz i tak by się nie zajął (np., w jaskiniach).

non-player-arrow-despawn-rate

  • Zalecana wartość: 60
  • Zmniejsza czas (w tickach) istnienia strzał wystrzelonych przez moby.

prevent-moving-into-unloaded-chunks

  • Zalecana wartość: true
  • Blokuje możliwość wejścia w niezaładowane chunki, dzięki czemu serwer będzie mniej obciążony (zwłaszcza podczas lagów).

use-faster-eigencraft-redstone

  • Zalecana wartość: true
  • Zmniejsza ilość block updatów generowanych przez redstone, nie psując zachowania maszyn stworzonych dla czystego Minecraft.

per-player-mob-spawns

  • Zalecana wartość: true
  • Zmienia limit mobów, aby działał na osobnych graczy, a nie na całym serwerze. Dzięki temu większe farmy nie będą blokowały spawnowania mobów wookół innych graczy.

Zalecane pluginy:

Mimo że powyższa konfiguracja powinna rozwiązać większość problemów, nie wszystko, nadal możesz cierpieć na lagi spowodowane mobami. Jeśli dalej ma to u ciebie miejsce, możesz wytestować powyższe pluginy:

  • LimitPillagers - Limitowanie złosadników
  • Villager Optimiser - Ograniczenie zachowań osadników (może generować problemy z nieodnawianiem ofert).
  • EntityTrackerFixer - Zmniejsza ilość aktywnie śledzonych mobów (może generować problemy).
  • ClearLagg - Znajdowanie lagujących chunków, limitowanie mobów. Zalecam jednak wyłączyć autousuwanie mobów/itemów.

Serwer dalej laguje, co robić?

Jeśli dalej ma to miejsce, spróbuj usunąć cięższe pluginy. Timingsy (/timings report) są dobrym sposobem na wyłapanie przyczyn lagów. Jeśli nawet po usunięciu problematycznych pluginów dalej masz problem, to znaczy, że pora na migrację na lepszego hosta. Jeśli chodzi o VPS, to sam mogę polecić ci lvlup.pro, na którym z kodem Patbox otrzymasz 10% zniżki podczas zakupu. Jednak jeśli na twoim serwerze znajduje się już te 50+ osób, powinieneś zainwestować w serwer dedykowany.

Na koniec

Mam nadzieję, że ten poradnik tobie pomógł. W razie problemów oraz pytań zapraszam do sekcji komentarzy lub na nasz serwer Discord. Poradnik jest bazowany na poradniku autorstwa Celebrimbor oraz moim doświadczeniu z serwerami. Jeśli masz jakieś uwagi, chętnie ich wysłucham.