Serwer Minecraft laguje: DDoS czy problemy serwera?
Lagi to jeszcze nie DDoS
Za każdym razem, gdy serwer zaczyna ciąć, pierwsza myśl to "atakują nas DDoS". W 80% przypadków to nieprawda. Najczęściej przyczyna jest banalna: krzywo skonfigurowany plugin, brak RAM, albo świat, który waży 15 GB i ładuje chunki z prędkością dyskietki.
Problem w tym, że objawy DDoS i lagów serwera bywają bardzo podobne. Gracze widzą to samo - "serwer laguje". Ale przyczyny są różne i leczyć je trzeba inaczej.
Przejdźmy po konkretnych krokach i rozeznajmy, co dokładnie dzieje się z twoim serwerem.
Krok 1: Sprawdź TPS
TPS (Ticks Per Second) to puls serwera. Normalna wartość to 20. Jeśli niższa, serwer nie radzi sobie z obsługą logiki gry.
W konsoli Minecraft:
/tps
Albo jeśli jest Spark:
/spark tps
Co oznaczają cyfry:
- 20.0 - wszystko idealnie, problem nie w logice gry
- 15-19 - niewielkie spadki, do zniesienia
- 10-15 - zauważalne lagi, coś zżera zasoby
- Poniżej 10 - serwer się dusi
Oto co ważne. Jeśli TPS jest niski (poniżej 15), najpewniej problem jest w samym serwerze, nie w ataku. Ataki DDoS zwykle nie kładą TPS, bo atak idzie na poziomie sieci. Serwer może mieć idealne 20 TPS, ale gracze i tak nie mogą się połączyć, bo kanał jest zapchany.
Jeśli TPS jest 20, ale lagi są, to podejrzane. Najpewniej problem jest sieciowy: albo DDoS, albo problemy u hostingu z siecią.
Krok 2: Patrzymy na CPU i RAM
Wejdź na serwer po SSH i sprawdź obciążenie:
htop
Albo jeśli htop nie jest zainstalowany:
top -c
Na co patrzeć:
- CPU 80-100% na procesie Java - serwer jest przeciążony, TPS pewnie też jest niski. To problem serwerowy.
- RAM używany na 90%+ - jeśli Java dobija do limitu pamięci, zaczyna się GC (garbage collection) i serwer przycina na sekundy. To jedna z najczęstszych przyczyn "lagów".
- CPU w normie, RAM w normie, ale lagi są - znaczy problem nie jest w zasobach obliczeniowych. Kopiemy dalej.
Typowy wynik htop przy normalnym obciążeniu:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 minecraft 20 0 8.2g 4.1g 12340 S 45.0 52.0 5:23.41 java -Xmx6G -jar paper.jar
45% CPU, 52% RAM - wszystko normalnie, zasoby są. Jeśli przy tym laguje, szukaj przyczyny gdzie indziej.
Krok 3: Sprawdzamy sieć
Tu zaczyna się najciekawsze. Problemy sieciowe bywają dwóch rodzajów: "atakują nas DDoS" i "u hostingu coś się popsuło".
Liczba połączeń:
netstat -an | grep :25565 | wc -l
Albo jeśli masz kilka portów:
ss -s
Normalne liczby: jeśli na serwerze jest 50 graczy, powinno być około 50-70 połączeń na port serwera. No może 100, jeśli ktoś się przepinał.
Podejrzane liczby: 500+ połączeń przy 30 graczach online - coś nie tak. 2000+ - prawie na pewno atak.
Sprawdzamy ruch w czasie rzeczywistym:
iftop -i eth0
Jeśli iftop nie jest zainstalowany:
apt install iftop
Normalny serwer Minecraft z 50 graczami pobiera 5-15 Mbit/s. Jeśli widzisz 100+ Mbit/s, a graczy jest 20, to nie jest normalne.
Szybkie sprawdzenie ruchu przychodzącego:
cat /proc/net/dev | grep eth0
Uruchom dwa razy z interwałem 10 sekund i policz różnicę w bajtach. Albo użyj vnstat, jeśli jest zainstalowany:
vnstat -l -i eth0
Krok 4: Określamy typ problemu
Teraz masz dane. Postawmy diagnozę.
To problem serwerowy, jeśli:
- TPS poniżej 15
- CPU obciążony na 80%+
- W logach błędy pluginów lub "Can't keep up!"
- Lagi znikają, gdy graczy jest mało (np. w nocy)
- Lagi zaczęły się po aktualizacji pluginu/świata
netstatpokazuje normalną liczbę połączeń- Ruch w granicach normy
To DDoS, jeśli:
- TPS normalny (18-20), ale gracze nie mogą wejść
- Setki lub tysiące połączeń w
netstat - Ruch 100+ Mbit/s przy małej liczbie graczy
- Hosting wysłał powiadomienie o nietypowym ruchu
- Nie możesz połączyć się po SSH (kanał zapchany)
- W logach setki "Player connected" i "Player disconnected" w sekundach
- Problem pojawił się nagle, bez żadnych zmian na serwerze
To problem sieci hostingu, jeśli:
- TPS normalny
- CPU i RAM w normie
- Ruch w normie
- Liczba połączeń normalna
- Ale gracze mają ping 200+ lub tracą pakiety
- Problem u wszystkich graczy jednocześnie
Problemy serwerowe, które maskują się pod DDoS
Jest kilka typowych sytuacji, gdy wydaje się, że "atakują", a naprawdę winny jest serwer.
Spajki Garbage Collection
Gdy Java postanowi wyczyścić pamięć, serwer może zawisnąć na 1-5 sekund. Dla graczy wygląda to jak nagły freeze, potem wszystko w porządku, potem znów freeze.
Dodaj do parametrów uruchomienia:
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200
I sprawdź, czy Xmx nie jest większy niż 10-12 GB. Im więcej RAM przydzielone, tym dłuższa pauza GC.
Jeśli używasz Spark, sprawdź statystyki GC:
/spark gc
Ciężkie pluginy
Jeden krzywo napisany plugin może położyć cały serwer. Klasyka - plugin, który co tick robi zapytanie SQL albo skanuje wszystkie encje.
Profilowanie przez Spark:
/spark profiler start
Poczekaj 2-3 minuty, potem:
/spark profiler stop
Spark pokaże, który plugin zżera najwięcej ticków. Jeśli jakiś plugin zajmuje 40%+, masz winnego.
Ładowanie chunków
Gdy dużo graczy rozbiega się po świecie, serwer musi generować i podgrywać chunki. Na HDD to wolne, na SSD do zniesienia, ale wciąż może powodować spadki.
Rozwiązanie to pre-generacja świata:
/chunky radius 5000
/chunky start
I koniecznie sprawdź, czy serwer stoi na SSD. W 2026 uruchamiać Minecraft na HDD to masochizm.
Lagi MySQL
Jeśli pluginy używają MySQL i baza jest na tym samym serwerze, przy dużych zapytaniach może lagować cały serwer. Sprawdzamy:
mysqladmin -u root -p processlist
Jeśli widzisz zapytania, które wiszą po 10-30 sekund, problem jest w bazie. Zoptymalizuj zapytania, dodaj indeksy, albo przenieś bazę na osobny serwer.
Uszkodzony świat
Czasami konkretny region świata jest uszkodzony. Gdy gracz wchodzi w ten chunk, serwer zaczyna się ciąć. Objawy - lagi pojawiają się tylko, gdy konkretny gracz jest w konkretnym miejscu.
Sprawdź logi pod kątem błędów ładowania chunków i spróbuj usunąć problematyczny plik regionu z world/region/.
Narzędzia do diagnostyki
Oto zestaw narzędzi, które powinny być na każdym serwerze Minecraft:
W Minecrafcie:
- Spark - must have plugin. Profilowanie, TPS, GC, memory. Stawiaj go w pierwszej kolejności.
- Timings (wbudowane w Paper) -
/timings on, potem/timings report. Pokaże co spowalnia.
Na serwerze (Linux):
- htop - patrzymy na CPU i RAM.
apt install htop - iftop - ruch w czasie rzeczywistym.
apt install iftop - vnstat - statystyki ruchu w czasie.
apt install vnstat - ss / netstat - połączenia sieciowe
- iostat - obciążenie dysku.
apt install sysstat
Do głębokiej diagnostyki sieci:
tcpdump -i eth0 port 25565 -c 100 -nn
Pokaże pierwsze 100 pakietów na port serwera. Jeśli widzisz kupę pakietów SYN z różnych IP bez ACK, to SYN flood.
netstat -an | grep :25565 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
Ta komenda pokaże top-20 adresów IP po liczbie połączeń. Jeśli jedno IP ma 200+ połączeń, to albo bot, albo ktoś wali.
Algorytm diagnostyki krok po kroku
Gdy serwer załagował, działaj po kolei:
1. Sprawdź TPS - /tps lub /spark tps
- Niski? Idź do kroku 2A
- Normalny (18+)? Idź do kroku 2B
2A. TPS niski - problem serwerowy:
- Sprawdź CPU/RAM przez
htop - Uruchom
/spark profilerna 2-3 minuty - Popatrz, co zżera zasoby
- Sprawdź logi pod kątem błędów
2B. TPS normalny - problem sieciowy:
- Sprawdź liczbę połączeń:
netstat -an | grep :25565 | wc -l - Sprawdź ruch:
iftop -i eth0 - Dużo połączeń (500+)? Najpewniej DDoS.
- Ruch rozbity? Najpewniej DDoS.
- Wszystko w normie? Problem u hostingu, pisz do supportu.
3. Potwierdzamy DDoS:
- Patrzymy na top IP:
netstat -an | grep :25565 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20 - Sprawdzamy logi Minecraft pod kątem masowych połączeń
- Patrzymy na powiadomienia od hostingu
Co robić, gdy rozpoznałeś problem
Jeśli to lagi serwerowe:
- Zaktualizuj rdzeń. Paper, Purpur, Folia - w każdej aktualizacji fixują wydajność.
- Zoptymalizuj server.properties i config.
view-distance: 6-8zamiast 10,simulation-distance: 4-6. - Wylicz problematyczny plugin. Profilowanie Spark to twój najlepszy przyjaciel.
- Pre-generuj świat. Chunky rozwiązuje problem ładowania chunków.
- Dodaj RAM, ale nie więcej niż 10-12 GB. Więcej - dłuższe pauzy GC.
- Przejdź na SSD, jeśli jeszcze na HDD.
Jeśli to DDoS:
Tu sprawa jest poważniejsza. Reguły iptables pomogą przed drobnymi atakami, ale przed poważnym DDoS-em na 10+ Gbit/s - nie.
- Włącz whitelist jako środek tymczasowy.
- Nie zmieniaj portu - to bez sensu.
- Jeśli hosting ma podstawową ochronę - włącz. Czasem pomaga.
- Do stałej ochrony potrzeba reverse proxy, które filtruje ruch Minecraft. Usługi typu MineGuard analizują protokół Minecraft i odsiewają boty na poziomie aplikacji, a nie po prostu po IP.
- Ukryj prawdziwe IP po skonfigurowaniu ochrony. Jeśli atakujący zna prawdziwy IP, ominie każdy proxy.
Jeśli problem u hostingu:
- Pisz do supportu z konkretnymi danymi: "TPS 20, CPU 30%, ale gracze mają ping 300ms i stratę pakietów 20%".
- Poproś o sprawdzenie sieci i routingu.
- Jeśli hosting nie rozwiązuje problemu, zmieniaj hosting. Serio.
Realny przykład z logów
Tak wygląda log serwera w trakcie bot-ataku:
[12:34:56] [Server thread/INFO]: Player392 (/185.23.xx.xx:54321) logged in
[12:34:56] [Server thread/INFO]: Player392 left the game
[12:34:56] [Server thread/INFO]: Player847 (/91.108.xx.xx:12345) logged in
[12:34:56] [Server thread/INFO]: Player847 left the game
[12:34:57] [Server thread/INFO]: Player103 (/45.67.xx.xx:33210) logged in
[12:34:57] [Server thread/INFO]: Player103 left the game
[12:34:57] [Server thread/INFO]: Player556 (/103.28.xx.xx:44123) logged in
[12:34:57] [Server thread/INFO]: Player556 left the game
Dziesiątki połączeń na sekundę, różne IP, weszli i wyszli natychmiast. To bot-atak L7.
A tak wygląda lag serwerowy:
[12:34:56] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 4523ms or 70 ticks behind
[12:34:58] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 6102ms or 102 ticks behind
"Can't keep up" to zawsze problem serwerowy, nie DDoS. Serwer nie nadąża z obsługą ticków.
A tak wygląda pauza GC:
[12:35:01] [GC Thread] GC pause (G1 Evacuation Pause) 6144M->3072M(8192M) 847.23ms
847 milisekund freeze z powodu zbierania śmieci. Jeśli takie pauzy są częste, zmniejsz Xmx albo zoptymalizuj parametry GC.
Podsumowanie
Nie każdy lag to DDoS. Zanim spanikujesz, poświęć 5 minut na diagnostykę. Sprawdź TPS, CPU, RAM, sieć. W większości przypadków przyczyna okaże się banalna - ciężki plugin, brak zasobów albo uszkodzony świat.
A jeśli to naprawdę atak, to podpórki z iptables nie uchronią przed czymś poważniejszym. Potrzeba normalnej ochrony z filtrowaniem na poziomie protokołu, jak w MineGuard, albo własnego skonfigurowanego proxy, jeśli masz doświadczenie. Najważniejsze - nie zapomnij ukryć prawdziwego IP, inaczej cała reszta jest bez sensu.
Chroń swój serwer przed atakami DDoS
Darmowa ochrona z konfiguracją w 5 minut. 1 TB ruchu w zestawie.
Wypróbuj za darmoPowiązane artykuły
Jak zmonetyzować serwer Minecraft: donate, rangi, sklep i EULA
Pełny przewodnik po zarabianiu na serwerze Minecraft bez naruszania EULA Mojanga. Omawiamy modele monetyzacji, pluginy do donate'u, strategie cenowe i realne liczby przychodów.
GeyserMC i crossplay: jak zabezpieczyć serwer z graczami Bedrock
GeyserMC otwiera drzwi dla mobilnych i konsolowych graczy, ale dokłada port UDP, nowe wektory ataków i ból głowy z autentykacją. Rozkminiamy ryzyka crossplay'a i jak je domknąć.
Lagi na serwerze Minecraft: przyczyny i jak je usunąć
Rozkładamy przyczyny lagów na serwerze Minecraft: TPS, profilowanie przez spark, optymalizacja chunków, encji, redstone'a, konfiguracja flag JVM Aikara i Papera. Praktyczne przykłady configów.