Diagnostyka lagu serwera Minecraft
Jak zidentyfikowac przyczyny lagów i spadkow wydajności na serwerze Minecraft - od podstaw TPS i MSPT, przez profilowanie Sparkiem, po naprawe najczestszych problemow.
Rodzaje lagu
Zanim zaczniemy diagnostyke, ważne jest rozroznienie typow lagu. Każdy typ ma inne przyczyny i inne rozwiązania.
| Typ lagu | Objawy | Przyczyna | Diagnostyka |
|---|---|---|---|
| Lag serwerowy (TPS) | Moby poruszaja się wolno, bloki kopie się z opoznieniem, rośliny rosną wolno | Serwer nie nadaza z przetwarzaniem ticków | Spark profiler, /tps |
| Lag sieciowy (ping) | Teleportacje, rubber-banding, opozniony chat | Wolne połączenie między graczem a serwerem | Ping gracza, traceroute |
| Lag klienta (FPS) | Niski FPS, szarpanie obrazu, zacinanie | Slaby komputer gracza lub źle ustawienia | F3 (debug screen), OptiFine/Sodium |
| Spiki (lag spikes) | Okresowe zamrazanie na 1-3 sekundy | Garbage Collection, autosave, generowanie chunkow | Spark tickmonitor, logi GC |
Ten poradnik skupia się na lagu serwerowym - to jedyny typ, który administrator serwera może zdiagnozowac i naprawić. Lag sieciowy i klienta zalezy od gracza. Więcej o optymalizacji serwera znajdziesz w osobnym poradniku.
TPS i MSPT - metryki wydajności
Dwie kluczowe metryki wydajności serwera Minecraft:
TPS (Ticks Per Second)
TPS to liczba tickow przetwarzanych przez serwer na sekunde. Idealny TPS wynosi 20.0 - co oznacza, ze serwer przetwarza 20 cykli logiki gry na sekunde (jeden tick co 50 milisekund).
| TPS | Stan | Efekt dla graczy |
|---|---|---|
| 20.0 | Idealny | Plynna rozgrywka, brak zauwazalnych opoznien |
| 18-19 | Dobry | Minimalne opoznienia, wiekszosc graczy nie zauwazy |
| 15-17 | Średni | Zauważalne lagi - moby reaguja wolniej, redstone opozniony |
| 10-14 | Zly | Powazen lagi - gra jest niekomfortowa |
| Poniżej 10 | Krytyczny | Gra praktycznie niegrywalna |
MSPT (Milliseconds Per Tick)
MSPT to czas (w milisekundach) potrzebny na przetworzenie jednego ticku. To dokladniejsza metryka niz TPS:
- MSPT < 50 ms - TPS = 20.0, serwer ma zapas czasu
- MSPT = 50 ms - TPS = 20.0, ale na granicy - brak marginesu
- MSPT > 50 ms - TPS spada poniżej 20, serwer nie nadaza
MSPT jest ważniejszy niz TPS. Serwer może miec TPS 20.0 z MSPT 48 ms - pozornie wszystko OK, ale jeden dodatkowy gracz lub ciezzki plugin może przepelnic bufor i spowodowac spadek TPS. Monitoruj MSPT, nie tylko TPS.
Jak sprawdzić TPS i MSPT
/tps # podstawowy TPS (Spigot/Paper)
/spark tps # dokladny TPS + MSPT + CPU (Spark)
/spark tickmonitor # alerty gdy tick trwa dłużej niz 50ms Spark Profiler
Spark to najważniejsze narzędzie do diagnostyki wydajności serwera Minecraft. Jest wbudowany w nowsze wersje Paper lub dostępny jako plugin. Stworzony przez autora LuckPerms, Spark oferuje:
- Profilowanie CPU - które funkcje/pluginy zuzywaja najwięcej czasu procesora
- Monitoring TPS/MSPT - dokladne pomiary w czasie rzeczywistym
- Analiza pamieci - zrzuty pamieci (heap dump) do znajdowania wyciekow
- Tick monitor - powiadomienia o dlugich tickach
- Interaktywne raporty - wizualizacja w przegladarce z drzewkiem wywolan
Instalacja Spark
Na Paper 1.21+ Spark jest juz wbudowany. Na starszych wersjach lub Spigot:
# Pobierz z https://spark.lucko.me/download
# Umiesc w plugins/
# Zrestartuj serwer Profilowanie CPU - krok po kroku
- Uruchom profiler:
/spark profiler start - Graj normalnie przez 5-10 minut (odtwórz typowe obciazenie serwera)
- Zatrzymaj profiler:
/spark profiler stop - Otworz raport - Spark wygeneruje link do interaktywnego raportu w przegladarce
- Analizuj wyniki - szukaj najgrubszych galezi w drzewku wywolan
Komendy Spark
| Komenda | Opis |
|---|---|
/spark profiler start | Rozpocznij profilowanie CPU |
/spark profiler stop | Zatrzymaj i wygeneruj raport |
/spark tps | Aktualny TPS, MSPT i CPU |
/spark tickmonitor | Alerty o dlugich tickach (ponad 50ms) |
/spark health | Ogólny raport zdrowia serwera |
/spark heapdump | Zrzut pamieci do analizy wyciekow |
/spark gc | Statystyki Garbage Collectora |
/spark profiler start --only-ticks-over 50 | Profiluj tylko ticki trwajace dłużej niz 50ms |
Czytanie raportow Spark
Raport Spark wyswietla drzewko wywolan (call tree) - hierarchie funkcji z procentem czasu CPU, jaki każda z nich zuzyla. Oto jak go czytać:
Co szukac w drzewku
- Najgrubsze galezei - funkcje zuzywajace najwięcej % czasu to glowni winowajcy
- Nazwy pluginow - szukaj nazw swoich pluginow w drzewku. Jeśli plugin zajmuje 40% czasu ticku - to problem
- Entity ticking - jeśli
entityTicklubtickEntitiesdominuje, masz za dużo mobów - Chunk loading/generation - jeśli
chunkLoadlubchunkGeneratedominuje, potrzebujesz pre-generowania - Scheduler - jeśli
BukkitSchedulerjest wysoko, ktorysi plugin uruchamia cieżki kod co tick
Typowe wyniki i ich interpretacja
| Wpis w drzewku | Interpretacja | Rozwiazanie |
|---|---|---|
ServerLevel.tick > entityTick (40%+) | Za dużo entity (mobow, dropped itemow) | Zmniejsz limity mobow, ogranicz farmy |
Plugin XYZ > onTick (20%+) | Plugin XYZ jest źle zoptymalizowany | Zaktualizuj, wymien lub skonfiguruj plugin |
ChunkProviderServer > generateChunk (30%+) | Generowanie nowych chunkow obciarza serwer | Pre-generuj chunki (Chunky), ustaw world border |
MinecraftServer > autosave (spiki) | Autosave powoduje spiki lagów | Zmniejsz częstotliwość w paper-world-defaults.yml |
RedstoneWire > update (15%+) | Skomplikowane obwody redstone | Ogranicz redstone, włącz optymalizacje redstone w Paper |
Spark generuje również raport w formacie umożliwiającym udostepnienie na Discordzie lub forum - jeśli potrzebujesz pomocy, udostepnij link do raportu na społeczności PaperMC Discord.
Paper Timings
Timings to starszy system profilowania wbudowany w Paper. Jest mniej szczegółowy niz Spark, ale nadal przydatny:
/timings on # włącz zbieranie danych
# Poczekaj 5-10 minut typowej gry
/timings report # wygeneruj raport (link do strony z wynikami) Raport Timings wyswietla tabele z czasem spedzonym na poszczegolnych operacjach. Szukaj wpisow z wysokim "Total" i "Per Tick" - to główne źródła lagu.
W nowszych wersjach Paper (1.21+) Spark jest rekomendowany zamiast Timings. Timings mogą być nawet wyłaczone domyslnie.
Najczestsze przyczyny lagow
1. Za dużo entity (mobow, dropped itemow)
Najczestsza przyczyna spadku TPS. Każdy mob wymaga obliczen AI, pathfindingu i kolizji. 1000 mobow potrafi zaatakowac TPS nawet na mocnym serwerze.
Diagnostyka: /spark profiler - szukaj entityTick w drzewku.
Rozwiazanie: Zmniejsz limity w bukkit.yml, ogranicz farmy mobow, zmniejsz despawn range w paper-world-defaults.yml.
2. Generowanie nowych chunkow
Gdy gracz eksploruje nowe tereny, serwer musi wygenerowac chunki od zera - teren, jaskinie, struktury, oświetlenie. To niezwykle obciazajace.
Diagnostyka: Lagi występują gdy gracze eksploruja, nie gdy siedza w bazie.
Rozwiazanie: Pre-generuj chunki pluginem Chunky i ustaw world border. Więcej w poradniku optymalizacji.
3. Ciezkie pluginy
Źle napisane pluginy mogą wykonywac operacje na głównym watku serwera (synchroniczne zapytania SQL, obciazajace schedulery).
Diagnostyka: Spark profiler pokaze nazwe pluginu w drzewku z wysokim % czasu.
Rozwiazanie: Zaktualizuj, wymien na lzejsza alternatywe lub zoptymalizuj konfiguracje.
4. Redstone lag machines
Skomplikowane obwody redstone (szczególnie zegary i flying machines) mogą znacznie obciazyc serwer.
Diagnostyka: /spark profiler - szukaj RedstoneWire lub pistonBase.
Rozwiazanie: Włącz optymalizacje redstone w Paper, ogranicz obwody pluginem RedstoneLimiter.
5. Autosave i zapisy na dysk
Okresowy zapis świata na dysk może powodowac spiki lagow, szczególnie na serwerach z duzymi światami i wolnym dyskiem (HDD).
Diagnostyka: Spiki co kilka minut, widoczne w /spark tickmonitor.
Rozwiazanie: Zmniejsz max-auto-save-chunks-per-tick w Paper, uzyj dysku SSD/NVMe.
6. Za malo RAM
Gdy serwer używa więcej pamieci niz przydzielono, Garbage Collector pracuje intensywnie, powodując spiki lagow.
Diagnostyka: /spark gc pokazuje częstotliwość i czas GC. Czeste, długie pauzy GC = za malo RAM.
Rozwiazanie: Zwieksz pamiec w parametrach JVM (-Xmx). Więcej poniżej.
Diagnostyka entities
Entity (moby, dropped itemy, stojaki na zbroje, ramki na itemy) to najczestsza przyczyna lagu serwerowego. Oto jak je zdiagnozowac:
/spark profiler start --only-ticks-over 100
# Poczekaj na kilka lagujacych tickow
/spark profiler stop Opcja --only-ticks-over 100 profiluje tylko ticki trwajace dłużej niz 100 ms - pozwala to uchwycic dokładnie co powoduje spiki.
Przydatne komendy
| Komenda | Opis |
|---|---|
/paper entity list | Lista liczby entity per chunk (Paper) |
/lagg killmobs | Usuniecie mobow (plugin ClearLag) |
/lagg clear | Usuniecie dropped itemow (plugin ClearLag) |
/spark profiler start --thread server | Profiluj tylko główny watek serwera |
Diagnostyka chunkow
Chunki to drugaie najczestsza przyczyna lagow. Problemy z chunkami objawiaja się szczególnie gdy gracze eksploruja nowe tereny.
Sprawdzenie zaladowanych chunkow
/spark health # ogolne informacje o chunach
/paper world info # statystyki per świat (Paper) Jeśli liczba zaladowanych chunkow jest bardzo wysoka (ponad 5000), zmniejsz view-distance i simulation-distance w server.properties.
RAM i Garbage Collection
Java używa Garbage Collectora (GC) do automatycznego zwalniania nieuzywanej pamieci. GC może powodowac pauzy - krotkie okresy, gdy serwer zamraza się na czas czyszczenia pamieci.
Diagnostyka GC
/spark gc # statystyki GC
/spark health # zuzycie pamieci Jeśli GC wykonuje się częściej niz co minute lub pauzy trwaja dłużej niz 100 ms - masz problem z pamiecia.
Optymalne flagi JVM
Uzyj flag Aikar - zoptymalizowanych specjalnie dla serwerow Minecraft:
java -Xms4G -Xmx4G -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 -jar paper.jar --nogui Kluczowe: -Xms i -Xmx powinny być takie same - zapobiega to dynamicznej zmianie rozmiaru sterty, co poprawia stabilność GC. Nie przydzielaj więcej niz 10-12 GB - zbyt dużo RAM prowadzi do dlugich pauz GC.
Ile RAM na ilu graczy?
| Gracze | Rekomendowany RAM | Uwagi |
|---|---|---|
| 1-10 | 2-4 GB | Wystarczajacy do prostego serwera survival |
| 10-30 | 4-6 GB | Typowy serwer średniej wielkosci |
| 30-50 | 6-8 GB | Duży serwer z wieloma pluginami |
| 50-100 | 8-12 GB | Profesjonalny serwer, rozważ optymalizacje |
| 100+ | 12+ GB | Rozważ podzial na wiele serwerow (Velocity) |
Pamietaj, ze RAM to nie jedyny czynnik. Procesor jednowatkowy (Minecraft głównie używa jednego rdzenia) i dysk SSD sa rownie ważne.
Podsumowanie
Diagnostyka lagow to umiejętność, która każdy administrator serwera powinien opanowac. Spark profiler to Twoje główne narzędzie - naucz się czytać raporty i identyfikowac problemy. Pamietaj: najpierw diagnozuj, potem naprawiaj. Slepe zmiany w konfiguracji bez zrozumienia przyczyny problemu często pogarsza sytuacje.
Powiązane poradniki:
- Optymalizacja serwera - jak naprawić zdiagnozowane problemy
- Konfiguracja server.properties - ustawienia wydajnosciowe
- Serwer w Docker - flagi JVM w kontenerze
- Pluginy serwerowe - pluginy obciazajace serwer
- Hosting serwerow - zmien hosting jeśli sprzet jest za slaby
- Serwer Fabric - lzejsza alternatywa z modami optymalizacyjnymi