Jak uniknąć crashy serwera Minecraft — diagnostyka i prewencja
Crash to zwykle objaw głębszego problemu — pamięci, pluginu albo świata. Pokazujemy, jak czytać crash reporty Papera i jak chronić serwer przed nagłymi zatrzymaniami.
Crash serwera Minecraft to nagłe zatrzymanie się procesu Java z błędem. Dla graczy to wylogowanie wszystkich naraz, czasem utrata postępu z ostatnich minut. Dla właściciela — alarm w Discord o 3:00 nad ranem. Crashe są zwykle objawem głębszego problemu, ale mają konkretne, powtarzające się przyczyny i metody zapobiegania.
Rodzaje crashy
- OutOfMemoryError — Java skończyła RAM. Najczęstszy.
- StackOverflowError — nieskończona rekurencja w pluginie.
- NullPointerException — błąd w pluginie.
- ConcurrentModificationException — wątek zmodyfikował kolekcję, którą inny wątek iteruje.
- SIGSEGV / native crash — błąd na poziomie JVM/OS.
OutOfMemoryError — najczęstszy
Java zużyła cały dostępny heap. Symptomy:
- w logu
java.lang.OutOfMemoryError: Java heap space, - serwer się zatrzymuje,
- pliki
java_pid*.hprof(heap dumps) w katalogu serwera.
Naprawy:
- zwiększ
-Xmxw startup (np. 4G → 6G), - znajdź wyciek pamięci sparkiem (
/spark heapdump), - zaktualizuj problematyczne pluginy.
Watchdog Papera
Paper ma wbudowany watchdog. Jeśli serwer zawiesza się na ponad 60 sekund (timeout konfigurowalny), watchdog zabija proces i loguje:
The server has stopped responding!
This is most likely not an issue caused by Minecraft itself.
W spigot.yml:
settings:
timeout-time: 60
restart-on-crash: true
restart-script: ./start.sh
Plus skrypt start.sh w katalogu serwera, który ponownie uruchamia Javę po crashu.
Auto-restart przez systemd
Bardziej niezawodne niż restart-script. Plik /etc/systemd/system/minecraft.service:
[Unit]
Description=Minecraft Paper Server
After=network.target
[Service]
Type=simple
User=minecraft
WorkingDirectory=/srv/minecraft
ExecStart=/usr/bin/java -Xms6G -Xmx6G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
Po crashu systemd restartuje serwer w 10 sekund. Bez interwencji właściciela.
Powiadomienia o crashach
Bash skrypt monitorujący proces Java + webhook Discord:
#!/usr/bin/env bash
while true; do
if ! pgrep -f "paper.jar" > /dev/null; then
curl -X POST -H 'Content-Type: application/json' \
-d '{"content":"⚠️ Serwer Minecraft padł! Restartowanie..."}' \
"$DISCORD_WEBHOOK_URL"
fi
sleep 30
done
Albo użyj Healthchecks.io — serwer pinguje serwis co minutę, brak pingu = alert.
Diagnostyka po crashu
Po crashu Paper tworzy crash-reports/ z plikiem crash-2026-XX-XX_XX.XX.XX-server.txt. Otwórz, sprawdź sekcję „Description" i stack trace.
Najczęstsze wpisy:
at me.somePlugin.SomeClass.method()— wina pluginu „somePlugin".java.lang.OutOfMemoryError— heap dump wjava_pid*.hprof.EXCEPTION_ACCESS_VIOLATION— błąd JVM (zaktualizuj Javę).
Prewencja
Aktualizacje
Pluginy + Paper aktualizuj co 2 tygodnie. 70% crashy to znane bugi naprawione w nowszych wersjach.
RAM z buforem
Daj Javie 60% RAM-u VPS-a, nie 100%. System też potrzebuje pamięci. -Xms = -Xmx = stałe alokacje, brak fragmentacji.
Aikar Flags
Standardowe JVM Aikar Flags dramatycznie zmniejszają OutOfMemoryError'y. G1GC z optymalnymi parametrami.
Limit entity
Zbyt dużo entity (5000+) → pamięć wybucha. FarmLimiter + per-player-mob-spawns.
Backupy
Każdy crash to potencjalna utrata postępu z ostatnich 5 minut. Backup co godzinę = maks 1h utraconej pracy.
Problematyczne pluginy
Niektóre pluginy znane są z crashy:
- stare wersje WorldEdit (2018-2019) — race conditions,
- pluginy używające ProtocolLib bez aktualizacji,
- customowe pluginy bez try-catch,
- pluginy z bezpośrednim modyfikowaniem NMS w nowych wersjach Minecrafta.
Po każdym crashu sprawdź, jaki plugin jest w stack trace. Zaktualizuj lub usuń.
Heap dump — analiza wycieku
Jeśli crash OutOfMemoryError się powtarza, włącz auto-dump:
java -XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=./dumps \
-Xms6G -Xmx6G \
...
Po crashu plik java_pid*.hprof pokaże, jakie obiekty zajmowały najwięcej. Otwórz w Eclipse MAT lub IntelliJ Memory Analyzer.
Środowisko testowe
Nigdy nie aktualizuj pluginów bezpośrednio na produkcji. Stwórz drugi (testowy) serwer z kopią świata. Aktualizuj tam, testuj 2–3 dni, potem produkcja.
To 1 godzina dodatkowej pracy, która oszczędza dziesiątki godzin sprzątania po crashach.
Podsumowanie
Crashy nie da się wyeliminować całkowicie. Ale 95% z nich można uniknąć przez Aikar Flags, wystarczający RAM, watchdog z auto-restartem, regularne aktualizacje pluginów, środowisko testowe i monitorowanie.
Najgorszy scenariusz — crash o 3:00 nad ranem, brak auto-restartu, gracze patrzą na pusty serwer do rana. Najlepszy — crash w 5 sekund po, systemd uruchomił ponownie, gracze zauważyli „chwilowy laga". Różnica zwykle to 1 plik .service.