Serwer Minecraft laguje: DDoS czy problemy serwera?

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
  • netstat pokazuje 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 profiler na 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:

  1. Zaktualizuj rdzeń. Paper, Purpur, Folia - w każdej aktualizacji fixują wydajność.
  2. Zoptymalizuj server.properties i config. view-distance: 6-8 zamiast 10, simulation-distance: 4-6.
  3. Wylicz problematyczny plugin. Profilowanie Spark to twój najlepszy przyjaciel.
  4. Pre-generuj świat. Chunky rozwiązuje problem ładowania chunków.
  5. Dodaj RAM, ale nie więcej niż 10-12 GB. Więcej - dłuższe pauzy GC.
  6. 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.

  1. Włącz whitelist jako środek tymczasowy.
  2. Nie zmieniaj portu - to bez sensu.
  3. Jeśli hosting ma podstawową ochronę - włącz. Czasem pomaga.
  4. 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.
  5. Ukryj prawdziwe IP po skonfigurowaniu ochrony. Jeśli atakujący zna prawdziwy IP, ominie każdy proxy.

Jeśli problem u hostingu:

  1. Pisz do supportu z konkretnymi danymi: "TPS 20, CPU 30%, ale gracze mają ping 300ms i stratę pakietów 20%".
  2. Poproś o sprawdzenie sieci i routingu.
  3. 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 darmo


Powiązane artykuły