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 oznacza | Dobrze | Problem |
|---|---|---|---|
| TPS (ticki na sekundę) | Ile ticków serwer faktycznie wykonuje na sekundę. | 20 | Poniż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 ms | Powyż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):
tps
mspt
spark tpstps– ś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:
Can't keep up! Is the server overloaded? Running 2500ms or 50 ticks behindSerwer 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 gracz | Przyczyna | Gdzie szukać |
|---|---|---|
| Bloki po zniszczeniu wracają, moby zamierają, wszyscy gracze mają ten sam problem | Lag serwera (niskie TPS) | Ten poradnik |
| Niskie FPS, szarpany obraz, ale innym graczom wszystko działa | Wydajność komputera gracza | Ustawienia grafiki w grze, mody po stronie klienta |
| Gracza „cofa” (rubber-banding), wysoki ping tylko u niego | Połączenie gracza | Ping gracza poleceniem spark ping --player <NICK> |
| Serwer działa dobrze, ale nowe obszary wczytują się powoli | Generowanie terenu | Pregenerowanie Chunky |
Szybkie wygrane#
Posortowane od największego efektu do najmniejszego. Większość zrobisz w mniej niż dziesięć minut.
| Kolejność | Krok | Dlaczego pomaga | Gdzie |
|---|---|---|---|
| 1 | Używaj Papera lub Purpura zamiast Vanilli | Paper zawiera setki optymalizacji i poprawek błędów, których Vanilla nie ma. | Zakładka Oprogramowanie, zobacz Typy serwerów |
| 2 | Pregeneruj świat i ustaw jego granicę | Generowanie nowego terenu to najbardziej wymagająca rzecz, jaką robi serwer. | Chunky |
| 3 | Zmniejsz simulation-distance do 6–8 i view-distance do 8 | Mniej chunków na gracza = mniej pracy w każdym ticku. | Zasięg widzenia i symulacji |
| 4 | Znajdź przyczynę profilerem | Pokazuje konkretny plugin, farmę lub byt. | spark |
| 5 | Ogranicz byty i farmy | Setki zwierząt w jednej zagrodzie albo przepełniona farma zabiją TPS. | Ustawienia Papera |
| 6 | Zostaw domyślne parametry startowe | Domyślny preset jest dostrojony do rozmiaru Twojej pamięci. | Parametry startowe |
| 7 | Aktualizuj serwer, pluginy i mody | Nowe 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.
| Opcja | Co robi | Kiedy 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 – Proxy | Parametry dla Velocity i BungeeCord. | Proponowany tylko dla serwerów proxy. |
| Preset – Bez strojenia | Tylko rozmiar sterty i limity pamięci. | Tymczasowo, gdy sprawdzasz, czy błąd powodują parametry. |
| Własne parametry | Dodatkowe 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:) 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: (oddaje nieużywaną pamięć systemowi). Purpur dostaje dodatkowo automatycznie --add-modules= (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ęć pakietu | Sterta (Paper, 20 pluginów) | Sterta (modpack, 200 modów) | Limit kontenera |
|---|---|---|---|
| 10 GB | 7872 MB | 7040 MB | 10 752 MB |
| 12 GB | 9792 MB | 8896 MB | 12 902 MB |
| 16 GB | 13 504 MB | 12 672 MB | 17 203 MB |
| 24 GB | 21 056 MB | 20 224 MB | 25 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.
| Sytuacja | view-distance | simulation-distance |
|---|---|---|
| Mały serwer ze znajomymi, bez lagów | 10 | 10 |
| Publiczny survival, 20+ graczy | 8–10 | 6–8 |
| Serwer laguje i nie wiesz dlaczego | 8 | 6 |
| Minigry, lobby | 6–8 | 4–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:
| Plik | Co zawiera |
|---|---|
config/paper-global.yml | Ustawienia całego serwera (proxy, wczytywanie chunków, limity spamu). |
config/ | Domyślne ustawienia wszystkich światów. Tutaj stroisz wydajność. |
world/ | Nadpisania 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_. |
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ść:
| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
chunks. | Nie 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. | true | Domyślnie false. Włącz na serwerach z elytrami i szybkim podróżowaniem. |
chunks. | Ile 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: 8 | Domyślnie bez limitu (-1). Nie wpisuj tu zwierząt ani mobów – reszta zniknęłaby przy zapisie. |
collisions. | Po ilu kolizjach byt przestaje obliczać kolejne kolizje. | 2 | Domyś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. | Przyspiesza obliczanie wybuchów (TNT, creepery). | true | Domyślnie false. Włącz zawsze; wynik wybuchów się nie zmienia. |
misc. | Jak obliczany jest redstone: VANILLA, EIGENCRAFT, ALTERNATE_CURRENT. | ALTERNATE_CURRENT | Domyś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. | Wyłącza zdarzenie dla pluginów wywoływane przy każdym przedmiocie przenoszonym przez lejek. | false | true tylko wtedy, gdy żaden plugin nie śledzi przenoszenia przez lejki (ochrona skrzyń, filtry). Inaczej ochrony przestałyby działać. |
tick-rates.mob-spawner | Jak często (w tickach) spawnery mobów sprawdzają otoczenie i spawnują. | 2 | Domyś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-spread | Jak często (w tickach) serwer próbuje rozprzestrzeniać trawę. | 4 | Domyślnie 1. Trawa rozrasta się wolniej; gracze zwykle tego nie zauważą. |
entities. | Odległ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: 72 | Na zatłoczonych serwerach. Mniejsze hard zwalnia miejsce na nowe moby bliżej graczy. |
environment. | Mapy skarbów od wieśniaków i ze skrzyń. Szukanie najbliższej struktury jest bardzo wymagające. | true | false, gdy spark pokazuje lagi przy handlu z kartografami albo otwieraniu skrzyń. |
entities. | Czy stojaki na zbroję tickują (fizyka, grawitacja). | true | false 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):
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: 2spigot.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.
| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
entity-activation-range. | W jakiej odległości (w blokach) od gracza zwierzęta tickują w pełni. Dalej tickują tylko od czasu do czasu. | 16–24 | Domyślnie 32. Zmniejsz na serwerach z dużymi zagrodami. |
entity-activation-range. | To samo dla potworów. | 24 | Domyślnie 32. |
entity-activation-range. | To samo dla wieśniaków. | 16 | Domyślnie 32. Wieśniacy należą do najbardziej wymagających bytów. Zbyt niska wartość spowalnia farmy wieśniaków. |
entity-activation-range. | Inne byty (przedmioty na ziemi, wagoniki). | 8–12 | Domyślnie 16. |
entity-activation-range. | Uczestnicy najazdów. | 48 | Domyślnie 64. Zbyt niska wartość psuje najazdy. |
merge-radius.item | Do jakiej odległości (w blokach) łączą się identyczne przedmioty na ziemi. | 2.5 | Domyślnie 0.5. Większa wartość = mniej bytów na ziemi. |
merge-radius.exp | To samo dla kulek doświadczenia. -1 = zachowanie Vanilli. | 3.0 | Domyślnie -1. |
nerf-spawner-mobs | Moby ze spawnerów nie mają AI (nie ruszają się ani nie atakują). | true | Domyślnie false. Oszczędza wydajność na farmach XP, ale moby ze spawnerów nie atakują – uprzedź graczy. |
ticks-per. | Po ilu tickach lejek przenosi przedmiot. | 8 | Domyślnie 8 (Vanilla). Wyższa wartość spowalnia wszystkie lejki – zmienia zachowanie zegarów redstone. |
bukkit.yml#
| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
spawn-limits.monsters | Maksymalna liczba potworów (na gracza, jeśli w Paperze włączone jest per-player-mob-spawns). | 50 | Domyślnie 70. Mniej potworów = mniej obliczeń. |
spawn-limits.animals | Maksymalna liczba naturalnie spawnujących się zwierząt. | 8 | Domyślnie 10. |
spawn-limits., water-ambient, ambient | Ryby, kałamarnice, nietoperze. | 3, 10, 5 | Domyślnie 5, 20, 15. |
ticks-per.monster-spawns | Po ilu tickach serwer próbuje spawnować potwory. | 2 | Domyślnie 1. |
ticks-per.autosave | Po ilu tickach zapisuje się cały świat (6000 = 5 minut). | 6000 | Nie 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.
Zainstaluj Chunky w zakładce Pluginy (dla modów Mody) › Przeglądaj: wyszukaj
Chunkyi kliknij Zainstaluj. Potem uruchom serwer ponownie (poradnik o pluginach).W Konsoli ustaw środek granicy świata:
text worldborder center 0 0worldborder center– ustawia środek granicy świata.0 0– współrzędne X i Z środka. Zwykle środek świata albo współrzędne spawnu.
Ustaw rozmiar granicy:
text worldborder set 10000worldborder 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.
Przekaż granicę do Chunky:
text chunky worldborderChunky ustawi sobie środek i promień według granicy świata.
Uruchom generowanie:
text chunky startKonsola regularnie pokazuje postęp w procentach, liczbę wygenerowanych chunków i szacowany pozostały czas.
Inne polecenia:
| Polecenie | Co robi |
|---|---|
chunky pause | Wstrzymuje generowanie i zapisuje postęp. Przydatne, gdy dołączy dużo graczy. |
chunky continue | Wznawia wstrzymane generowanie. |
chunky cancel | Anuluje zadanie. Wygenerowane chunki zostają. |
chunky progress | Wypisuje postęp (przydatne w grze). |
chunky silent | Wyłącza lub włącza komunikaty o postępie w konsoli. |
chunky start world square 0 0 5000 | Uruchamia generowanie bez granicy świata: świat world, kształt kwadratu, środek 0 0, promień 5000 bloków. |
chunky world | Wybiera ś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:
/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/).
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 tps | TPS 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 health | Link do przeglądu na żywo: TPS, MSPT, procesor, pamięć, dysk. Aktualizuje się co 10 sekund. |
spark gc | Historia 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#
Poczekaj, aż serwer zacznie lagować (albo aż będzie miał zwykłą liczbę graczy). Profil pustego serwera nic nie pokaże.
W Konsoli uruchom profiler na 10 minut:
text spark profiler start --timeout 600spark profiler start– uruchamia profiler.--timeout 600– automatycznie go zatrzyma po 600 sekundach (10 minutach) i prześle wynik.
Poczekaj 10 minut. W konsoli pojawi się link do profilu (
spark.lucko.me/…).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:
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:
- 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.
- Klikając, rozwijaj węzły i obserwuj procenty. Zawsze idź ścieżką z największym udziałem.
- Czas spędzony w
Thread.sleep()lub w stanie „parked” jest w porządku – serwer czeka na kolejny tick, bo ma zapas. - Typowe znaleziska:
| Co widzisz w profilu | Co to oznacza | Co 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ów | Gracze 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, lejki | Techniczne budowle. | redstone-implementation, hopper. (ostrożnie). |
- 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:
paper entity list * minecraft:overworld
paper entity list minecraft:villager minecraft:overworldpaper 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_enddla 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):
| Mod | Co robi | Loader |
|---|---|---|
| Lithium | Optymalizuje fizykę, AI mobów i inne części gry bez zmiany zachowania. | Fabric, NeoForge |
| FerriteCore | Zmniejsza zużycie pamięci. | Fabric, Forge, NeoForge |
| ModernFix | Przyspiesza start i zmniejsza zużycie pamięci, zwłaszcza przy dużych modpackach. | Fabric, Forge, NeoForge |
| C2ME | Równoległe generowanie i wczytywanie chunków. Głęboko ingeruje w obsługę świata – przed użyciem zrób kopię zapasową. | Fabric |
| spark | Profiler opisany wyżej. | Fabric, Forge, NeoForge |
| Chunky | Pregenerowanie ś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 healthpokazuje 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#
- Po zmianach uruchom serwer ponownie i pozwól mu działać z graczami co najmniej 15 minut.
- Wpisz
spark tps. MSPT (mediana) powinno być poniżej 50 ms, najlepiej poniżej 35 ms, a TPS 20. - Komunikat
Can't keep up!nie powinien się już powtarzać. - 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.
- 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.
- 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.
- Poszukaj w logu
OutOfMemoryError: Direct buffer memorylubOutOfMemoryError: Metaspace. Wskazują na plugin lub mod, który zapełnia bufory sieciowe albo wciąż na nowo wczytuje klasy. - Jeśli awarie trwają nawet przy zalecanych ustawieniach, szukaj wycieku pamięci:
spark heapsummarypokaże, co zajmuje stertę, aspark 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. z powrotem na VANILLA i uruchom serwer ponownie.
Podsumowanie
- Lagi mierz poleceniami
tps,msptispark 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 600znajdzie przyczynę lagów; link wklej do Analizatora profili spark.- Ustawienia Papera zmieniaj w
config/, po zrobieniu kopii zapasowej i z restartem.paper-world-defaults. yml
Dalsza lektura#
- Profilowanie w dokumentacji Papera (otwiera się w nowym oknie)
- Konfiguracja świata w Paperze (otwiera się w nowym oknie)
- Konfiguracja spigot.yml (otwiera się w nowym oknie)
- Konfiguracja bukkit.yml (otwiera się w nowym oknie)
- Flagi Aikara w dokumentacji Papera (otwiera się w nowym oknie)
- Polecenia spark (otwiera się w nowym oknie)
- Polecenia Chunky (otwiera się w nowym oknie)