Przejdź do treści
Aktualny kupon:10% zniżkiUżyj w zamówieniu

Wydajność serwera Minecraft: lagi, parametry, zasięg widzenia, Chunky i spark

Jak sprawdzić, co spowalnia serwer, i jak to naprawić: TPS i MSPT, parametry startowe i pamięć, zasięg widzenia, ustawienia Papera, pregenerowanie świata Chunky i profilowanie sparkiem.

  • zaawansowany
  • ~40 min
  • Zaktualizowano 9.10.2026

Serwer, który „laguje”, zwykle nie cierpi na brak sprzętu. Częściej ma jedną konkretną przyczynę: za duży zasięg symulacji, generowanie nowego terenu, przepełnioną farmę albo źle napisany plugin. Pokażemy, jak zmierzyć lagi, znaleźć ich przyczynę i ją usunąć – od szybkich poprawek po ustawienia Papera i profilowanie.

Czego potrzebujesz

  • Serwer Minecraft w StormHost (zalecamy Paper lub Purpur; część poradnika dotyczy też Fabric i NeoForge)
  • Dostęp do zakładek Konsola, Ustawienia serwera, Uruchamianie i Pliki
  • Kopia zapasowa serwera przed zmianą konfiguracji (poradnik)
  • Około 40 minut

Jak rozpoznać, co laguje#

Serwer Minecraft prowadzi grę w tickach. Powinien przejść ich 20 na sekundę, co daje mu 50 milisekund na tick. Dwie liczby, które musisz znać:

WartośćCo oznaczaDobrzeProblem
TPS (ticki na sekundę)Ile ticków serwer faktycznie wykonuje na sekundę.20Poniżej 19 gracze zauważają spowolnienie; poniżej 15 gra jest nieprzyjemna.
MSPT (milisekundy na tick)Ile milisekund trwa jeden tick.Poniżej 50 ms, najlepiej poniżej 35 msPowyżej 50 ms serwer nie nadąża i TPS spada.

MSPT to dokładniejszy wskaźnik: serwer z MSPT 45 ms ma jeszcze 20 TPS, ale żadnego zapasu. Gdy MSPT przekroczy 50 ms, TPS zaczyna spadać.

Wartości sprawdzisz w Konsoli (polecenia wpisuj bez ukośnika):

text
tps
mspt
spark tps
  • tps – średnie TPS z ostatnich 1, 5 i 15 minut (Paper, Purpur).
  • mspt – średni, najkrótszy i najdłuższy czas ticka (Paper, Purpur).
  • spark tps – TPS, MSPT (minimum, mediana, 95. percentyl, maksimum) i obciążenie procesora. Działa wszędzie, gdzie jest zainstalowany spark (Paper ma go wbudowanego).

Gdy serwer dłużej nie nadąża, konsola pokazuje:

Wyniktext
Can't keep up! Is the server overloaded? Running 2500ms or 50 ticks behind

Serwer mówi, że ma 2,5 sekundy (50 ticków) opóźnienia i te ticki pominie. Pojedynczy komunikat przy starcie albo podczas generowania terenu jest w porządku. Jeśli powtarza się co kilka minut, czytaj dalej.

Lag serwera czy coś innego?#

Co widzi graczPrzyczynaGdzie szukać
Bloki po zniszczeniu wracają, moby zamierają, wszyscy gracze mają ten sam problemLag serwera (niskie TPS)Ten poradnik
Niskie FPS, szarpany obraz, ale innym graczom wszystko działaWydajność komputera graczaUstawienia grafiki w grze, mody po stronie klienta
Gracza „cofa” (rubber-banding), wysoki ping tylko u niegoPołączenie graczaPing gracza poleceniem spark ping --player <NICK>
Serwer działa dobrze, ale nowe obszary wczytują się powoliGenerowanie terenuPregenerowanie Chunky

Szybkie wygrane#

Posortowane od największego efektu do najmniejszego. Większość zrobisz w mniej niż dziesięć minut.

KolejnośćKrokDlaczego pomagaGdzie
1Używaj Papera lub Purpura zamiast VanilliPaper zawiera setki optymalizacji i poprawek błędów, których Vanilla nie ma.Zakładka Oprogramowanie, zobacz Typy serwerów
2Pregeneruj świat i ustaw jego granicęGenerowanie nowego terenu to najbardziej wymagająca rzecz, jaką robi serwer.Chunky
3Zmniejsz simulation-distance do 6–⁠8 i view-distance do 8Mniej chunków na gracza = mniej pracy w każdym ticku.Zasięg widzenia i symulacji
4Znajdź przyczynę profileremPokazuje konkretny plugin, farmę lub byt.spark
5Ogranicz byty i farmySetki zwierząt w jednej zagrodzie albo przepełniona farma zabiją TPS.Ustawienia Papera
6Zostaw domyślne parametry startoweDomyślny preset jest dostrojony do rozmiaru Twojej pamięci.Parametry startowe
7Aktualizuj serwer, pluginy i modyNowe wersje często naprawiają wycieki pamięci i wolny kod.Zakładki Oprogramowanie i Pluginy

Pluginy „czyszczące lagi”

Pluginy, które obiecują cudowne przyspieszenie (regularne kasowanie przedmiotów z ziemi, „czyszczenie RAM”, wymuszanie odśmiecania pamięci), problemu nie rozwiązują. Kasują graczom przedmioty, często powodują przycięcia i tylko ukrywają przyczynę. Prawdziwą przyczynę znajdziesz sparkiem.

Parametry startowe i pamięć#

Parametry (flagi) to argumenty, z którymi uruchamia się Java. Ustawiają rozmiar pamięci dla gry (sterty), limity pamięci poza stertą i zachowanie garbage collectora, który czyści z pamięci niepotrzebne dane. W strefie klienta znajdziesz je w zakładce Uruchamianie, w sekcji Parametry startowe.

Strefa klienta sama oblicza stertę i limity według rozmiaru pakietu, typu serwera, wersji Javy i liczby pluginów lub modów. Przelicza je przy tworzeniu serwera, po zmianie pakietu, po zmianie typu lub wersji oraz przed startem ze strefy klienta, jeśli od ostatniego razu coś z tego się zmieniło. Nie nadpisuje polecenia startowego, które ręcznie edytowałeś w panelu albo ustawiłeś jako własne. Jeśli takie polecenie ma stertę większą, niż zniesie mniejszy pakiet, po zmianie pakietu serwera nie uruchomimy (od razu by padł) i wyślemy Ci e-mail.

OpcjaCo robiKiedy jej użyć
Preset – Zalecane (G1)Garbage collector G1 z ustawieniami według dokumentacji Papera. Domyślny dla wszystkich typów serwerów.Większość serwerów.
Preset – Krótkie pauzy (ZGC)Garbage collector z bardzo krótkimi pauzami kosztem wyższego obciążenia procesora. Tylko Java 21 i nowsza.Duże serwery od 16 GB, gdy spark gc pokazuje długie pauzy, a procesor ma zapas.
Preset – ProxyParametry dla Velocity i BungeeCord.Proponowany tylko dla serwerów proxy.
Preset – Bez strojeniaTylko rozmiar sterty i limity pamięci.Tymczasowo, gdy sprawdzasz, czy błąd powodują parametry.
Własne parametryDodatkowe parametry. Dozwolone są tylko -XX:…, -D…=… i --add-modules=…, maksymalnie 30. Sterty nie da się ustawić. Limity buforów sieciowych (-XX:MaxDirectMemorySize), skompilowanego kodu (-XX:ReservedCodeCacheSize) i wczytanych klas (-XX:MaxMetaspaceSize) tak, a sterta zostanie wtedy przeliczona.Gdy poradnik pluginu lub moda każe dodać konkretną właściwość -D albo gdy plugin czatu głosowego potrzebuje więcej buforów sieciowych.

Wszystkie presety mają te same zabezpieczenia: limity buforów sieciowych, skompilowanego kodu i wczytanych klas, MALLOC_ARENA_MAX=2 (mniej aren pamięci alokatora) i od Javy 17 -XX:TrimNativeHeapInterval (oddaje nieużywaną pamięć systemowi). Purpur dostaje dodatkowo automatycznie --add-modules=jdk.incubator.vector (szybsze obliczenia, z których Purpur może korzystać).

Przyciski w tej sekcji:

  • Zapisz – ustawienia zostaną użyte przy następnym starcie.
  • Zapisz i uruchom ponownie – serwer uruchomi się ponownie od razu. Jeśli z nowymi parametrami nie wystartuje, strefa klienta je cofnie i zobaczysz komunikat Parametry nie są zgodne, przywrócono poprzednie ustawienia.
  • Przywróć poprzednie – przywraca ostatnie działające ustawienia.
  • Użyj zalecanych – pojawia się, gdy sterta jest za duża na Twój pakiet albo polecenie startowe nie ma limitów pamięci. Ustawia zalecane polecenie.
  • Przelicz teraz – przelicza parametry od razu, abyś nie musiał czekać na następny start ze strefy klienta.

W części Podział pamięci widzisz, ile idzie na stertę, a ile zostaje na całą resztę. Po automatycznym przeliczeniu strefa klienta pokaże na przykład Polecenie startowe dostosowaliśmy do nowego rozmiaru RAM: sterta 8,2 → 9,6 GB.

Prowadzisz serwer poza StormHost? Generator skryptu startowego utworzy skrypt startowy z tym samym obliczeniem dla Dockera, Linuksa i Windowsa.

Dlaczego sterta to nie cała RAM#

Sterta (-Xmx) nigdy nie urośnie ponad swój limit. Rośnie pamięć poza stertą: bufory sieciowe, wczytane klasy pluginów i modów, skompilowany kod, wątki i systemowy alokator. Najbardziej rosną bufory sieciowe – bez limitu mogą osiągnąć rozmiar sterty, więc serwer ze stertą 6 GB może skończyć na 12 GB.

Kontener serwera ma twardy limit o 5 % wyższy niż pakiet (przy pakietach do 4 GB o 10 %, do 2 GB o 15 %) i nie ma swapu. Gdy proces przekroczy limit, system go zabije. Konsola pokaże Out of memory: true, a w logu serwera nie ma żadnego błędu.

Dlatego każda duża część poza stertą ma limit, wszystko razem z zapasem mieści się poniżej rozmiaru pakietu, a sterta dostaje resztę. Gdy któraś część osiągnie swój limit, serwer zapisze do logu błąd (OutOfMemoryError: Direct buffer memory lub Metaspace) zamiast cicho paść, a ten błąd wskaże winowajcę.

Pamięć pakietuSterta (Paper, 20 pluginów)Sterta (modpack, 200 modów)Limit kontenera
10 GB7872 MB7040 MB10 752 MB
12 GB9792 MB8896 MB12 902 MB
16 GB13 504 MB12 672 MB17 203 MB
24 GB21 056 MB20 224 MB25 805 MB

Sterta ma ten sam rozmiar minimalny i maksymalny (-Xms = -Xmx) i jest przydzielana od razu przy starcie. Dlatego wykres pamięci w panelu pokazuje wysoką liczbę od początku. Panel wlicza też pamięć podręczną plików świata, którą system w razie potrzeby zwalnia. Liczba bliska limitowi sama w sobie nie oznacza awarii.

Dokumentacja Papera zaleca co najmniej 6–⁠10 GB sterty niezależnie od liczby graczy i ostrzega, że od pewnego momentu więcej pamięci nie poprawia wydajności.

Kiedy czas na większy pakiet

Jeśli spark health pokazuje stertę stale powyżej 90 % nawet po odśmiecaniu (spark gc zgłasza częste i długie pauzy) i wykluczyłeś wycieki pamięci w pluginach, serwer potrzebuje więcej pamięci. Na większy pakiet przejdziesz w zakładce Zmiana pakietu (poradnik). Po upgradzie parametry przeliczą się automatycznie i zadziałają przy następnym starcie.

Zasięg widzenia i symulacji#

Świat jest podzielony na chunki (kolumny 16 × 16 bloków). Serwer trzyma wczytane chunki w określonym promieniu wokół każdego gracza:

  • view-distance – ile chunków wokół gracza serwer wysyła do gry (co gracz widzi). Wpływa głównie na pamięć i sieć.
  • simulation-distance – promień, w którym chunki „żyją”: moby się poruszają, uprawy rosną, redstone i farmy działają. Wpływa głównie na procesor, a więc na TPS.

Liczba chunków rośnie z kwadratem odległości. Przy view-distance=10 serwer trzyma wokół każdego gracza 441 chunków, przy 8 tylko 289 (o jedną trzecią mniej). Przy symulacji efekt jest taki sam.

Sytuacjaview-distancesimulation-distance
Mały serwer ze znajomymi, bez lagów1010
Publiczny survival, 20+ graczy8–⁠106–⁠8
Serwer laguje i nie wiesz dlaczego86
Minigry, lobby6–⁠84–⁠6

Ustawisz je w zakładce Ustawienia serwera w grupie Świat (wszystkie ustawienia). Zasięgu symulacji poniżej 5 nie zalecamy – większe farmy przestają wtedy działać, bo część farmy jest poza symulowanym obszarem.

Paper i poszczególne światy

Na Paperze możesz ustawić zasięgi także osobno dla każdego świata w spigot.yml (world-settings › default › view-distance i simulation-distance). Wartość default oznacza „użyj server.properties”.

Ustawienia Papera#

Paper i Purpur mają własną konfigurację w folderze config:

PlikCo zawiera
config/paper-global.ymlUstawienia całego serwera (proxy, wczytywanie chunków, limity spamu).
config/paper-world-defaults.ymlDomyślne ustawienia wszystkich światów. Tutaj stroisz wydajność.
world/dimensions/minecraft/<dimension>/paper-world.ymlNadpisania dla jednego wymiaru (od wersji 26.1; <dimension> to overworld, the_nether lub the_end). W starszych wersjach plik paper-world.yml w folderze świata, na przykład world_nether/paper-world.yml.

Zawsze edytuj paper-world-defaults.yml. Otwórz plik w edytorze w zakładce Pliki, znajdź istniejącą sekcję (na przykład chunks:) i zmień wartość w niej. Nie dodawaj tej samej sekcji drugi raz – przy zduplikowanym kluczu serwer albo odmówi wczytania pliku, albo użyje tylko jednego z nich, a Twoja zmiana nie zadziała.

Zasady YAML

Wcinaj tylko spacjami (nigdy tabulatorami), na tym samym poziomie używaj tego samego wcięcia, a po dwukropku stawiaj spację. Przed edycją zrób kopię zapasową. Po edycji uruchom serwer ponownie – polecenia paper reload nie zalecamy, bo niektóre wartości wczytują się tylko przy starcie.

Wybrane ustawienia o największym wpływie na wydajność:

UstawienieCo robiZalecana wartośćKiedy zmieniać
chunks.prevent-moving-into-unloaded-chunksNie wpuszcza graczy do chunka, który nie jest jeszcze wczytany (szybki lot elytrą, jazda wagonikiem). Serwer nie musi wtedy wymuszać wczytywania chunków w środku ticka.trueDomyślnie false. Włącz na serwerach z elytrami i szybkim podróżowaniem.
chunks.entity-per-chunk-save-limitIle bytów danego typu zapisuje się w jednym chunku. Chroni przed chunkami zalanymi tysiącami strzał lub kulek doświadczenia.arrow: 16, experience_orb: 16, snowball: 8, ender_pearl: 8, fireball: 8, small_fireball: 8Domyślnie bez limitu (-1). Nie wpisuj tu zwierząt ani mobów – reszta zniknęłaby przy zapisie.
collisions.max-entity-collisionsPo ilu kolizjach byt przestaje obliczać kolejne kolizje.2Domyślnie 8. Niższa wartość mocno odciąża miejsca, gdzie stłoczonych jest wiele mobów. Moby w tłumie mniej się wtedy przepychają – jeśli przez to przestanie działać farma, podnieś wartość z powrotem.
environment.optimize-explosionsPrzyspiesza obliczanie wybuchów (TNT, creepery).trueDomyślnie false. Włącz zawsze; wynik wybuchów się nie zmienia.
misc.redstone-implementationJak obliczany jest redstone: VANILLA, EIGENCRAFT, ALTERNATE_CURRENT.ALTERNATE_CURRENTDomyślnie VANILLA. Alternatywne obliczanie mocno odciąża pył redstone, ale w rzadkich przypadkach zmienia zachowanie układów zależnych od kolejności aktualizacji. Uprzedź graczy z technicznymi budowlami.
hopper.disable-move-eventWyłącza zdarzenie dla pluginów wywoływane przy każdym przedmiocie przenoszonym przez lejek.falsetrue tylko wtedy, gdy żaden plugin nie śledzi przenoszenia przez lejki (ochrona skrzyń, filtry). Inaczej ochrony przestałyby działać.
tick-rates.mob-spawnerJak często (w tickach) spawnery mobów sprawdzają otoczenie i spawnują.2Domyślnie 1. Spawner jest sprawdzany co drugi tick. Paper odlicza jego opóźnienie szybciej, więc spawnuje moby mniej więcej tak samo często. -1 wyłącza wszystkie spawnery.
tick-rates.grass-spreadJak często (w tickach) serwer próbuje rozprzestrzeniać trawę.4Domyślnie 1. Trawa rozrasta się wolniej; gracze zwykle tego nie zauważą.
entities.spawning.despawn-rangesOdległość od gracza, w której moby losowo (soft) lub od razu (hard) znikają. Vanilla: 32 i 128 bloków.Na przykład monster: soft: 30, hard: 72Na zatłoczonych serwerach. Mniejsze hard zwalnia miejsce na nowe moby bliżej graczy.
environment.treasure-maps.enabledMapy skarbów od wieśniaków i ze skrzyń. Szukanie najbliższej struktury jest bardzo wymagające.truefalse, gdy spark pokazuje lagi przy handlu z kartografami albo otwieraniu skrzyń.
entities.armor-stands.tickCzy stojaki na zbroję tickują (fizyka, grawitacja).truefalse na serwerach z tysiącami ozdobnych stojaków. Nie będą wtedy spadać, a niektóre pluginy mogą z nimi nie działać.

Tak wyglądają zmiany w pliku (tylko zmienione części; pozostałe linie pliku zostaw bez zmian):

config/paper-world-defaults.ymlYAML
chunks:
  entity-per-chunk-save-limit:
    arrow: 16
    experience_orb: 16
    snowball: 8
    ender_pearl: 8
  prevent-moving-into-unloaded-chunks: true
collisions:
  max-entity-collisions: 2
entities:
  spawning:
    despawn-ranges:
      monster:
        hard: 72
        soft: 30
environment:
  optimize-explosions: true
misc:
  redstone-implementation: ALTERNATE_CURRENT
tick-rates:
  grass-spread: 4
  mob-spawner: 2

spigot.yml i bukkit.yml#

Paper czyta też starsze pliki konfiguracyjne spigot.yml i bukkit.yml w głównym folderze serwera.

spigot.yml#

Wszystkie ustawienia są w sekcji world-settings › default.

UstawienieCo robiZalecana wartośćKiedy zmieniać
entity-activation-range.animalsW jakiej odległości (w blokach) od gracza zwierzęta tickują w pełni. Dalej tickują tylko od czasu do czasu.16–24Domyślnie 32. Zmniejsz na serwerach z dużymi zagrodami.
entity-activation-range.monstersTo samo dla potworów.24Domyślnie 32.
entity-activation-range.villagersTo samo dla wieśniaków.16Domyślnie 32. Wieśniacy należą do najbardziej wymagających bytów. Zbyt niska wartość spowalnia farmy wieśniaków.
entity-activation-range.miscInne byty (przedmioty na ziemi, wagoniki).8–12Domyślnie 16.
entity-activation-range.raidersUczestnicy najazdów.48Domyślnie 64. Zbyt niska wartość psuje najazdy.
merge-radius.itemDo jakiej odległości (w blokach) łączą się identyczne przedmioty na ziemi.2.5Domyślnie 0.5. Większa wartość = mniej bytów na ziemi.
merge-radius.expTo samo dla kulek doświadczenia. -1 = zachowanie Vanilli.3.0Domyślnie -1.
nerf-spawner-mobsMoby ze spawnerów nie mają AI (nie ruszają się ani nie atakują).trueDomyślnie false. Oszczędza wydajność na farmach XP, ale moby ze spawnerów nie atakują – uprzedź graczy.
ticks-per.hopper-transferPo ilu tickach lejek przenosi przedmiot.8Domyślnie 8 (Vanilla). Wyższa wartość spowalnia wszystkie lejki – zmienia zachowanie zegarów redstone.

bukkit.yml#

UstawienieCo robiZalecana wartośćKiedy zmieniać
spawn-limits.monstersMaksymalna liczba potworów (na gracza, jeśli w Paperze włączone jest per-player-mob-spawns).50Domyślnie 70. Mniej potworów = mniej obliczeń.
spawn-limits.animalsMaksymalna liczba naturalnie spawnujących się zwierząt.8Domyślnie 10.
spawn-limits.water-animals, water-ambient, ambientRyby, kałamarnice, nietoperze.3, 10, 5Domyślnie 5, 20, 15.
ticks-per.monster-spawnsPo ilu tickach serwer próbuje spawnować potwory.2Domyślnie 1.
ticks-per.autosavePo ilu tickach zapisuje się cały świat (6000 = 5 minut).6000Nie zmieniaj. Paper zapisuje chunki na bieżąco.

Pregenerowanie świata Chunky#

Gdy gracz dotrze tam, gdzie jeszcze nikt nie był, serwer musi wygenerować teren. To najbardziej wymagająca operacja ze wszystkich: jeden gracz na elytrze potrafi obniżyć TPS całego serwera. Rozwiązaniem jest wygenerować teren z wyprzedzeniem i ustawić granicę świata, aby gracze nie mogli wyjść poza przygotowany obszar.

Plugin Chunky generuje teren w tle, stopniowo, i można go wstrzymać. Istnieje dla Papera, Purpura i Folii, a jako mod dla Fabric, Forge i NeoForge.

  1. Zainstaluj Chunky w zakładce Pluginy (dla modów Mody) › Przeglądaj: wyszukaj Chunky i kliknij Zainstaluj. Potem uruchom serwer ponownie (poradnik o pluginach).

  2. W Konsoli ustaw środek granicy świata:

    text
    worldborder center 0 0
    • worldborder center – ustawia środek granicy świata.
    • 0 0 – współrzędne X i Z środka. Zwykle środek świata albo współrzędne spawnu.
  3. Ustaw rozmiar granicy:

    text
    worldborder set 10000
    • worldborder set – ustawia rozmiar granicy.
    • 10000 – średnica w blokach. Świat będzie miał 10 000 × 10 000 bloków, czyli 5000 bloków od środka w każdym kierunku.
  4. Przekaż granicę do Chunky:

    text
    chunky worldborder

    Chunky ustawi sobie środek i promień według granicy świata.

  5. Uruchom generowanie:

    text
    chunky start

    Konsola regularnie pokazuje postęp w procentach, liczbę wygenerowanych chunków i szacowany pozostały czas.

Inne polecenia:

PolecenieCo robi
chunky pauseWstrzymuje generowanie i zapisuje postęp. Przydatne, gdy dołączy dużo graczy.
chunky continueWznawia wstrzymane generowanie.
chunky cancelAnuluje zadanie. Wygenerowane chunki zostają.
chunky progressWypisuje postęp (przydatne w grze).
chunky silentWyłącza lub włącza komunikaty o postępie w konsoli.
chunky start world square 0 0 5000Uruchamia generowanie bez granicy świata: świat world, kształt kwadratu, środek 0 0, promień 5000 bloków.
chunky worldWybiera świat. W grze bez nazwy wybiera świat, w którym stoisz.

Nether i End#

Nether jest osiem razy mniejszy niż Overworld (1 blok w Netherze = 8 bloków w Overworldzie). Dla granicy o średnicy 10 000 bloków w Overworldzie (promień 5000) w Netherze wystarczy promień 625 bloków. Połącz się z grą, przejdź do Netheru i wpisz na czacie:

text
/chunky world
/chunky center 0 0
/chunky radius 625
/chunky start
  • /chunky world – bez nazwy wybiera świat, w którym właśnie jesteś (Nether).
  • /chunky center 0 0 – środek generowania.
  • /chunky radius 625 – promień w blokach.
  • /chunky start – uruchamia generowanie.

Granicę świata w Netherze (/worldborder set 1250 wpisane w Netherze) ustawiaj tylko na Paperze i Purpurze, a od wersji 1.21.9 także gdzie indziej – dopiero od tej wersji każdy wymiar ma własną granicę. W starszych wersjach Vanilli, Fabric i NeoForge polecenie zmieniłoby granicę także w Overworldzie.

End możesz wygenerować mniejszy (na przykład promień 2000–⁠3000 bloków); gracze poruszają się tam głównie po wyspach.

Dysk i procesor

Pregenerowany świat zajmuje miejsce na dysku – im większa granica, tym więcej. Zacznij od mniejszej średnicy (5000–⁠10 000 bloków) i obserwuj wolne miejsce w zakładce Pliki albo we wskaźniku dysku w Konsoli. Generowanie w pełni wykorzystuje procesor: uruchamiaj je, gdy na serwerze jest mało graczy, albo w międzyczasie wstrzymaj je poleceniem chunky pause.

Po restarcie serwera generowanie samo się nie wznowi. Kontynuuj poleceniem chunky continue (albo ustaw continue-on-restart: true w plugins/Chunky/config.yml).

Diagnostyka sparkiem#

spark to profiler: podczas działania serwera zapisuje, co serwer robi, i pokazuje wynik jako przejrzyste drzewo z procentami. Paper ma go wbudowanego od wersji 1.21 (Purpur też); na Fabricu i NeoForge zainstaluj mod spark z Modrinth. Na proxy Velocity polecenie to sparkv.

Szybki przegląd#

Polecenie (w konsoli)Co pokazuje
spark tpsTPS z ostatnich 5 s, 10 s, 1 min, 5 min i 15 min, czasy ticków i obciążenie procesora. Koloruje wartości na zielono, pomarańczowo lub czerwono według tego, jak są dobre.
spark healthLink do przeglądu na żywo: TPS, MSPT, procesor, pamięć, dysk. Aktualizuje się co 10 sekund.
spark gcHistoria garbage collectora: jak często i jak długo czyścił pamięć.
spark pingŚredni ping graczy. Z --player <NICK> ping jednego gracza.
spark tickmonitor --threshold-tick 50Śledzi ticki dłuższe niż 50 ms i wypisuje każdy z nich. Ponowne spark tickmonitor kończy śledzenie.

Profilowanie krok po kroku#

  1. Poczekaj, aż serwer zacznie lagować (albo aż będzie miał zwykłą liczbę graczy). Profil pustego serwera nic nie pokaże.

  2. W Konsoli uruchom profiler na 10 minut:

    text
    spark profiler start --timeout 600
    • spark profiler start – uruchamia profiler.
    • --timeout 600 – automatycznie go zatrzyma po 600 sekundach (10 minutach) i prześle wynik.
  3. Poczekaj 10 minut. W konsoli pojawi się link do profilu (spark.lucko.me/…).

  4. Wklej link do Analizatora profili spark. Pokaże, co spowalnia serwer i co zmienić.

Profilu nie musisz przesyłać: z opcją --save-to-file (na przykład spark profiler start --timeout 600 --save-to-file) spark zapisze go jako plik .sparkprofile w folderze plugins/spark (na Fabricu i NeoForge config/spark). Pobierz go w zakładce Pliki i wgraj do analizatora.

Aby zatrzymać profiler wcześniej, wpisz spark profiler stop. Przy krótkich skokach (serwer od czasu do czasu na sekundę „zamarza”) użyj:

text
spark profiler start --only-ticks-over 100
  • --only-ticks-over 100 – zapisuje tylko ticki dłuższe niż 100 ms. Odfiltrowuje zwykłe działanie i zostawia tylko „lagujące” ticki. Wybierz wartość między 50 a 100.

Jak czytać wynik#

Jeśli chcesz przejrzeć drzewo sam, otwórz link do profilu w przeglądarce:

  1. Na liście wątków rozwiń Server thread – główny wątek gry. Problemy w innych wątkach (wczytywanie chunków, sieć) są rzadsze.
  2. Klikając, rozwijaj węzły i obserwuj procenty. Zawsze idź ścieżką z największym udziałem.
  3. Czas spędzony w Thread.sleep() lub w stanie „parked” jest w porządku – serwer czeka na kolejny tick, bo ma zapas.
  4. Typowe znaleziska:
Co widzisz w profiluCo to oznaczaCo zrobić
Duży udział tickEntities lub bytów (Villager, Zombie …)Zbyt wiele bytów.entity-activation-range, limity spawnu, sprawdź farmy (zobacz Ile bytów jest na serwerze).
Duży udział generowania chunkówGracze eksplorują nowy teren.Chunky i granica świata.
Nazwa pakietu pluginu (na przykład com.example.plugin)Konkretny plugin.Zaktualizuj go, skonfiguruj albo zastąp.
Redstone, lejkiTechniczne budowle.redstone-implementation, hopper.disable-move-event (ostrożnie).
  1. W górnym pasku przełącz widok na Sources – pokazuje osobne drzewo dla każdego pluginu lub moda, więc od razu widzisz, który obciąża najbardziej.

Link do profilu możesz wysłać autorowi pluginu albo naszej pomocy technicznej. Nie zawiera haseł ani plików serwera.

Ile bytów jest na serwerze#

Na Paperze polecenie paper entity list wypisuje liczby bytów według typu. W konsoli trzeba podać też świat:

text
paper entity list * minecraft:overworld
paper entity list minecraft:villager minecraft:overworld
  • paper entity list – wypisuje byty.
  • * – bez filtra; wypisze wszystkie typy bytów z liczbami (pierwsza liczba to byty tickujące, druga nietickujące).
  • minecraft:villager – filtr na jeden typ. Wynik pokaże wtedy współrzędne chunków z największą liczbą tych bytów.
  • minecraft:overworld – świat (minecraft:the_nether, minecraft:the_end dla pozostałych wymiarów). W grze świata nie musisz podawać; użyty zostanie ten, w którym stoisz.

Potem idź w grze w to miejsce i zmniejsz farmę lub zagrodę.

Mody na wydajność (Fabric i NeoForge)#

Fabric i NeoForge nie mają optymalizacji Papera, ale istnieją mody serwerowe o tym samym celu. Wszystkie znajdziesz na Modrinth (w zakładce Mody › Przeglądaj):

ModCo robiLoader
LithiumOptymalizuje fizykę, AI mobów i inne części gry bez zmiany zachowania.Fabric, NeoForge
FerriteCoreZmniejsza zużycie pamięci.Fabric, Forge, NeoForge
ModernFixPrzyspiesza start i zmniejsza zużycie pamięci, zwłaszcza przy dużych modpackach.Fabric, Forge, NeoForge
C2MERównoległe generowanie i wczytywanie chunków. Głęboko ingeruje w obsługę świata – przed użyciem zrób kopię zapasową.Fabric
sparkProfiler opisany wyżej.Fabric, Forge, NeoForge
ChunkyPregenerowanie świata.Fabric, Forge, NeoForge

Zawsze wybieraj mod dla swojej dokładnej wersji Minecrafta i loadera. Szczegóły w artykule Mody i modpacki.

Kiedy czas na upgrade#

Upgrade pakietu ma sens, gdy:

  • spark pokazuje, że obciążenie jest rozłożone równomiernie (nie dominuje jeden plugin ani farma), a MSPT przy zwykłej liczbie graczy utrzymuje się powyżej 40 ms,
  • spark health pokazuje pamięć stale na limicie, a garbage collector nie nadąża,
  • dodajesz duży modpack albo planujesz dużo więcej graczy.

Jeśli większość czasu zabiera jeden plugin lub farma, więcej wydajności tego nie naprawi – trzeba usunąć przyczynę.

Sprawdzenie, czy działa#

  1. Po zmianach uruchom serwer ponownie i pozwól mu działać z graczami co najmniej 15 minut.
  2. Wpisz spark tps. MSPT (mediana) powinno być poniżej 50 ms, najlepiej poniżej 35 ms, a TPS 20.
  3. Komunikat Can't keep up! nie powinien się już powtarzać.
  4. Jeśli nie masz pewności, uruchom kolejny 10-⁠minutowy profil i porównaj go z poprzednim.

Rozwiązywanie problemów#

Serwer nie startuje po zmianie konfiguracji#

Najczęściej to błąd YAML (tabulator, złe wcięcie, zduplikowana sekcja). Poszukaj w konsoli linii z nazwą pliku i numerem linii. Popraw ją albo usuń plik – Paper przy starcie utworzy go ponownie z wartościami domyślnymi (Twoje zmiany przepadną). Ewentualnie przywróć kopię zapasową.

Parametry nie są zgodne, przywrócono poprzednie ustawienia.#

Serwer nie wystartował z nowymi parametrami i strefa klienta je cofnęła. Sprawdź własne parametry (literówka, parametr dla innej wersji Javy) i spróbuj presetu bez własnych parametrów.

Serwer nagle się wyłącza bez błędu w logu#

Typowy objaw przekroczenia limitu pamięci. Konsola pokazuje linie Exit code: 137 i Out of memory: true, a strefa klienta pokazuje nad konsolą Serwerowi zabrakło pamięci i system go zakończył. Panel uruchomi serwer jeszcze raz; jeśli w ciągu minuty znów padnie, zostawi go wyłączonego.

  1. W zakładce Uruchamianie sprawdź ostrzeżenia przy parametrach startowych. Jeśli sterta jest za duża na Twój pakiet albo polecenie nie ma limitów pamięci, kliknij Użyj zalecanych.
  2. Strefa klienta nie nadpisuje polecenia startowego, które edytowałeś ręcznie albo ustawiłeś jako własne. Użyj zalecanego presetu albo ustaw stertę według tabeli w sekcji Dlaczego sterta to nie cała RAM.
  3. Poszukaj w logu OutOfMemoryError: Direct buffer memory lub OutOfMemoryError: Metaspace. Wskazują na plugin lub mod, który zapełnia bufory sieciowe albo wciąż na nowo wczytuje klasy.
  4. Jeśli awarie trwają nawet przy zalecanych ustawieniach, szukaj wycieku pamięci: spark heapsummary pokaże, co zajmuje stertę, a spark profiler start --alloc --timeout 300, co przydziela najwięcej pamięci. Link wklej do Analizatora profili spark albo wyślij naszej pomocy technicznej.

java.lang.OutOfMemoryError: Java heap space#

Sterta jest pełna. Albo na serwerze jest więcej, niż mieści się w pamięci (modpack, duża liczba graczy), albo plugin lub mod „gubi” pamięć (wyciek pamięci). Pomoże upgrade albo znalezienie wycieku poleceniem spark heapsummary. Więcej błędów znajdziesz w artykule Najczęstsze błędy serwera Minecraft.

Chunky zgłasza nieprawidłowy świat#

Nazwa świata nie istnieje. W grze użyj /chunky world bez nazwy (wybierze świat, w którym stoisz), a w konsoli podaj nazwę głównego świata z level-name (domyślnie world).

Po włączeniu ALTERNATE_CURRENT nie działa budowla z redstone'em#

Niektóre układy polegają na kolejności aktualizacji z Vanilli. Ustaw misc.redstone-implementation z powrotem na VANILLA i uruchom serwer ponownie.

Podsumowanie

  • Lagi mierz poleceniami tps, mspt i spark tps: cel to 20 TPS i MSPT poniżej 50 ms.
  • Największy efekt: Paper, pregenerowany świat z granicą (Chunky) i rozsądny simulation-distance.
  • Strefa klienta sama ustawia stertę i limity pamięci według pakietu. Domyślny preset Zalecane (G1) zmieniaj tylko wtedy, gdy masz powód.
  • spark profiler start --timeout 600 znajdzie przyczynę lagów; link wklej do Analizatora profili spark.
  • Ustawienia Papera zmieniaj w config/paper-world-defaults.yml, po zrobieniu kopii zapasowej i z restartem.

Czy ten poradnik był pomocny?

Dotyczy

  • Paper, Purpur
  • Fabric, NeoForge
  • Minecraft Java 1.20 i nowsze
  • Minecraft 26.x

Usługi

Zgłoś błąd w poradniku

Wyszukiwanie w poradnikach