Czemu crashuje serwer Minecraft: pelny poradnik diagnostyki i naprawy

Czemu crashuje serwer Minecraft: pelny poradnik diagnostyki i naprawy

Twoj serwer Minecraft padl o trzeciej w nocy, na czacie panika, a ty nie wiesz, co sie stalo. Znajoma sytuacja? My w MineGuard pracujemy z setkami serwerow i widzimy te same problemy w kolko. W tym poradniku omawiamy wszystkie glowne przyczyny crashow i pokazujemy, jak je znajdowac i usuwac.

Jak czytac crash raporty

Pierwsza rzecz po crashu to znalezc i przeczytac crash raport. Serwer zapisuje je do folderu crash-reports/ w katalogu serwera. Pliki nazywaja sie wedlug daty i czasu, np.:

crash-reports/crash-2026-04-06_14.23.45-server.txt

Otworz ostatni plik. Struktura crash raportu wyglada tak:

---- Minecraft Crash Report ----
Time: 4/6/26 14:23
Description: Exception in server tick loop

java.lang.OutOfMemoryError: Java heap space
    at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:382)
    at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:873)

Najwazniejsze tu: linijka Description i pierwsza linijka bledu (w przykladzie wyzej to OutOfMemoryError). Stack trace ponizej pokazuje, gdzie dokladnie wystapil blad. Jesli w stacku przewija sie nazwa plugina, prawdopodobnie problem w nim.

Jesli serwer nie stworzyl crash raportu, szukaj info w logs/latest.log. Serwer moze nie zdazyl stworzyc pliku, jesli zamknal sie awaryjnie (np. OOM Killer na Linuksie zabil proces).

Brak pamieci (OutOfMemoryError)

To najczestsza przyczyna crashow. Serwer zjadl caly przydzielony RAM i nie moze dzialac dalej.

Objawy

  • W crash raporcie: java.lang.OutOfMemoryError: Java heap space
  • TPS spada stopniowo przed crashem
  • W logach moga byc wiadomosci o GC (garbage collector)

Rozwiazanie: Aikar's Flags

Nie tylko zwiekszaj -Xmx. Uzyj zoptymalizowanych flag Aikara, ktore konfiguruja garbage collector G1GC specjalnie pod Minecrafta:

java -Xms8G -Xmx8G \
  -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 server.jar --nogui

Wazny moment: -Xms i -Xmx powinny byc takie same. To zapobiega ciaglej zmianie rozmiaru heapa.

Ile pamieci przydzielac

  • 1-20 graczy: 4-6 GB
  • 20-50 graczy: 6-10 GB
  • 50-100 graczy: 10-16 GB
  • 100+ graczy: 16+ GB

Te liczby sa przyblizone. Ciezkie pluginy (Dynmap, Citizens) i duze swiaty wymagaja wiecej pamieci.

Uszkodzone chunki

Uszkodzony chunk wywoluje crash przy ladowaniu. Zwykle dzieje sie to, gdy gracz wchodzi w okreslony obszar, a serwer natychmiast pada.

Objawy

  • Crash przy wejsciu konkretnego gracza
  • W logach: ChunkLoadingException albo RegionFileCorruption
  • Bledy przy czytaniu danych NBT

Rozwiazanie

Ustal koordynaty problematycznego chunka z logow albo crash raportu. Potem:

  1. MCA Selector (polecamy): otworz swiat, znajdz uszkodzony chunk i usun go. Serwer wygeneruje go ponownie.

  2. Region Fixer do automatycznego skanowania:

python region-fixer.py /path/to/world
  1. Metoda reczna: wylicz plik regionu po koordynatach chunka. Chunk X=400, Z=800 jest w regionie r.12.25.mca (dzielimy koordynaty bloku przez 512). Usun ten plik z world/region/.

Profilaktyka

  • Rob regularne backupy
  • Nie wylaczaj serwera komenda kill, uzywaj stop
  • Uzywaj UPS albo ochrony przed nagle zanikiem zasilania

Konflikty pluginow

Dwa pluginy moga probowac zmieniac to samo, wywolujac crash. Szczegolnie czesto dzieje sie to z pluginami modyfikujacymi pakiety, obslugujacymi zdarzenia albo zmieniajacymi zachowanie mobow.

Objawy

  • Crash po zainstalowaniu nowego plugina
  • W stack trace widac nazwy pluginow
  • Bledy typu AbstractMethodError albo NoSuchMethodError

Metoda podzialu binarnego

Jesli nie wiadomo, ktory plugin winny:

  1. Usun polowe pluginow z folderu plugins/
  2. Uruchom serwer
  3. Jesli crash sie powtarza, problem w pozostalej polowie. Jesli nie - w usunietej.
  4. Powtarzaj, dzielac problematyczna polowe na pol.

W 3-4 iteracjach znajdziesz winnego nawet wsrod 30+ pluginow.

Czesto konfliktujace pary

  • ProtocolLib + przestarzale pluginy z niego korzystajace
  • Dwa anticheaty naraz
  • Pluginy czatu uzywajace roznych API
  • WorldEdit + pluginy ochrony regionow przy masowych operacjach

Przeciazenie encjami

Tysiace mobow, wyrzuconych przedmiotow albo wagonikow moga przeciazyc serwer do crashu.

Objawy

  • TPS spada stopniowo
  • W profilu Spark: entityTick zajmuje wiekszosc ticka
  • Watchdog timeout w logach

Rozwiazanie

Szybkie: zabic encje komenda:

/kill @e[type=!player]

Dlugoterminowe: skonfigurowac limity w bukkit.yml:

spawn-limits:
  monsters: 50
  animals: 10
  water-animals: 5
  water-ambient: 10
  ambient: 5

tick-inactive-spawners: false

Zainstaluj ClearLag albo FarmControl do automatycznej kontroli liczby encji.

Watchdog timeout

Serwer Minecraft oczekuje, ze kazdy tick skonczy sie w 50ms (20 TPS). Jesli jeden tick zajmuje wiecej niz 60 sekund, Watchdog przymusowo konczy serwer.

Objawy

  • W logach: A single server tick took 60.00 seconds
  • Considering it to be crashed, server will forcibly shutdown

Czeste przyczyny

  • Plugin wykonuje synchroniczna operacje z baza danych
  • Operacja WorldEdit na ogromnym regionie
  • Generacja chunkow w ciezkim swiecie (duzy render distance)
  • Jeden plugin zablokowal glowny watek

Rozwiazanie

Uzyj Spark do profilowania:

/spark profiler start

Poczekaj kilka minut, potem:

/spark profiler stop

Spark pokaze, ktora metoda ktorego plugina zajmuje najwiecej czasu w ticku serwera. Zwykle winny jest oczywisty.

Stack Overflow od rekurencyjnych pluginow

StackOverflowError dzieje sie, gdy plugin wywoluje sam siebie w nieskonczonosc. Klasyczny przyklad: plugin na zdarzenie smierci gracza teleportuje go, co wywoluje inne zdarzenie, ktore znow wywoluje ten sam handler.

W crash raporcie wyglada to tak:

java.lang.StackOverflowError
    at com.example.plugin.DeathHandler.onDeath(DeathHandler.java:45)
    at com.example.plugin.DeathHandler.onDeath(DeathHandler.java:45)
    at com.example.plugin.DeathHandler.onDeath(DeathHandler.java:45)
    ... (tysiace identycznych linii)

Rozwiazanie

Ustal plugin po stack trace i skontaktuj sie z developerem. Zwykle to bug, ktory naprawia sie aktualizacja plugina. Jako tymczasowe rozwiazanie - wylacz problematyczny plugin.

Crashe od pakietowych exploitow i DDoS

Jest osobna kategoria crashow, ktorej nie da sie naprawic ustawieniami serwera. To celowane ataki.

Pakietowe exploity

Napastnicy wysylaja specjalnie uformowane pakiety wywolujace bledy w kodzie serwera. Przyklady:

  • Book exploit: ksiazka z ogromnym tagiem NBT wywolujaca OOM
  • Position exploit: koordynaty NaN albo Infinity, crashujace system chunkow
  • Packet spam: tysiace pakietow interakcji przeciazajacych serwer

Ataki DDoS

Ogromny strumien ruchu zapycha lacze sieciowe albo przeciaza serwer falszywymi polaczeniami. Serwer marnuje wszystkie zasoby na obsluge smieciowego ruchu i przestaje odpowiadac.

Nasze rozwiazanie

W MineGuard zaprojektowalismy specjalny filtr sieciowy do ochrony przed tymi atakami. Nasz filtr dziala na poziomie sieci, zanim ruch dotrze do twojego serwera. Filtrujemy pakietowe exploity, blokujemy boty i pochlaniamy ruch DDoS. To sa problemy, ktorych pluginy nie moga rozwiazac, bo w momencie, gdy plugin dostaje pakiet, szkoda juz jest wyrzadzona. Nasz filtr przechwytuje szkodliwe pakiety zanim trafia na serwer.

Jak poprawnie prosic o pomoc

Jesli nie mozesz rozwiazac problemu sam, oto co przygotowac:

  1. Crash raport w calosci (plik z crash-reports/)
  2. Ostatni log (logs/latest.log)
  3. Raport Spark: wykonaj /spark profiler i podaj link
  4. Raport Timings: wykonaj /timings on, poczekaj 5 minut, potem /timings report
  5. Lista pluginow z wersjami (/plugins)
  6. Wersja serwera: Paper/Spigot/Purpur, wersja Minecrafta, wersja Javy

Z tymi informacjami pomoga ci na forum SpigotMC, w Discordzie serwera PaperMC albo w naszym Discordzie MineGuard. Nie pisz po prostu "serwer crashuje, pomocy". Im wiecej danych dostarczysz, tym szybciej dostaniesz rozwiazanie.

Podsumowanie

Wiekszosc crashow serwera Minecraft wpada w jedna z kategorii: brak pamieci, uszkodzone chunki, konflikty pluginow, przeciazenie encjami albo watchdog timeout. Wszystkie diagnozowane sa przez crash raporty i logi i wszystkie maja konkretne rozwiazania.

Wyjatkiem sa celowane ataki: pakietowe exploity i DDoS. Do ochrony przed nimi potrzebna jest filtracja sieciowa i wlasnie do tego stworzylismy MineGuard.

Rob backupy, czytaj logi, aktualizuj pluginy, a twoj serwer bedzie dzialal stabilnie.


Chroń swój serwer przed atakami DDoS

Darmowa ochrona z konfiguracją w 5 minut. 1 TB ruchu w zestawie.

Wypróbuj za darmo


Powiązane artykuły