Optymalizacja serwera Minecraft pod odporność na ataki
Większość administratorów serwerów Minecraft myśli o ochronie DDoS jako o czymś zewnętrznym. Filtr ruchu, firewall, anti-DDoS serwis. Wszystko to jest słuszne i potrzebne. Ale jest rzecz, którą często się pomija: sam serwer musi być zoptymalizowany tak, żeby wytrzymywał obciążenie.
Logika jest prosta. Jeśli twój serwer w normalnym trybie działa na 90% zasobów, wystarczy niewielki skok, żeby padł. Jeśli natomiast serwer używa 40-50% zasobów, ma zapas wytrzymałości. Ten zapas (headroom) decyduje, czy serwer przeżyje atak, czy padnie przy pierwszych oznakach obciążenia.
W tym artykule rozkminiamy konkretne kroki optymalizacji, które dają maksymalny zapas wydajności.
Dlaczego wydajność = odporność
Podczas ataku DDoS na serwer Minecraft dzieje się kilka rzeczy naraz:
- Rośnie liczba połączeń TCP (SYN flood, bot join)
- Zwiększa się zużycie CPU na obróbkę pakietów
- Pauzy GC stają się dłuższe przez wzrost obiektów w pamięci
- TPS siada, tick loop zwalnia
- Gracze zaczynają lagować, timeoutować i reconnectować, generując jeszcze więcej obciążenia
To efekt kaskadowy. Serwer, który i tak pracował na granicy, wchodzi w spiralę degradacji. A serwer z zapasem wydajności może strawić skok, podczas gdy zewnętrzna ochrona odsiewa boty.
Więcej o tym, jak odróżnić lagi od ataku, przeczytasz w artykule o diagnostyce lagów.
Flagi JVM: fundament wydajności
Java Virtual Machine to środowisko, w którym działa serwer Minecraft. Ustawienia JVM wprost wpływają na prędkość pracy, stabilność GC (garbage collection) i zachowanie pod obciążeniem.
Aikar's Flags
Standard branżowy dla serwerów Minecraft. Te flagi konfigurują G1 Garbage Collector pod wzorce obciążenia specyficzne dla Minecrafta:
java -Xms10G -Xmx10G \
-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:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-jar server.jar --nogui
Kluczowe punkty:
-Xmsi-Xmxtakie same: eliminuje dynamiczną zmianę rozmiaru heapa. JVM od razu alokuje całą pamięć i nie marnuje czasu na rozszerzanie pod obciążeniem. Krytycznie ważne przy ataku, kiedy memory pressure gwałtownie rośnie.G1NewSizePercent=30iG1MaxNewSizePercent=40: powiększony young generation. Minecraft tworzy ogromną liczbę krótkożyjących obiektów (chunk data, packet buffers, entity ticks). Duży young gen pozwala je zbierać tanio, bez full GC.G1HeapRegionSize=8M: optymalny rozmiar regionu dla serwerów z 8-12 GB. Dla serwerów z 4 GB i mniej lepiej zostawić domyślną wartość.AlwaysPreTouch: JVM przy starcie "dotyka" każdej strony pamięci, wymuszając na OS realne przydzielenie pamięci fizycznej. Bez tej flagi podczas ataku może się zdarzyć sytuacja, że JVM próbuje dostać pamięć, a OS oddał ją już innym procesom.
Ile RAM-u przydzielać
Popularny błąd: "im więcej RAM-u, tym lepiej". Nieprawda.
Dla G1GC istnieje wprost zależność: większy heap = dłuższe pauzy GC. Serwer z 32 GB heapa może dostawać pauzy GC 500-800 ms, co zamienia się w zauważalne fryzy.
Rekomendacje:
- Vanilla/Paper do 30 graczy: 4-6 GB
- Paper/Purpur 30-100 graczy: 8-12 GB
- Duże sieci 100+ graczy: 12-16 GB na instancję
- Proxy (Velocity/BungeeCord): 512 MB - 2 GB
Nie przydzielaj więcej niż 16 GB na jedną instancję. Jeśli potrzebujesz więcej zasobów, lepsze będzie horyzontalne skalowanie przez kilka serwerów za proxy.
Diagnostyka problemów z GC
Jak stwierdzić, że GC przeszkadza serwerowi? Włącz logowanie:
-Xlog:gc*:file=gc.log:time,uptime:filecount=5,filesize=10M
Albo użyj Spark:
/spark gc
Oznaki problemów:
- Pauzy GC dłuższe niż 100 ms pojawiają się częściej niż raz na minutę
- Full GC się dzieje w ogóle (przy prawidłowej konfiguracji G1GC nie powinno)
- Heap occupancy stale powyżej 70%
Jeśli widzisz te objawy, najprawdopodobniej problem tkwi w jednym z trzech: za mało RAM-u na liczbę pluginów i graczy, wyciek pamięci w jakimś pluginie, lub nieprawidłowe flagi JVM.
GraalVM vs OpenJDK
Dla Minecrafta 1.17+ warto rozważyć GraalVM. Jego kompilator JIT generuje bardziej optymalny kod natywny, co daje przyrost 10-15% w MSPT (milliseconds per tick). Przy ataku te 10-15% mogą okazać się różnicą między stabilnymi 20 TPS a spadkiem do 15.
# Instalacja GraalVM
sdk install java 21.0.2-graalce
Przy wyborze wersji Javy zwróć uwagę: Paper 1.20.5+ wymaga Javy 21. Używaj dokładnie tej wersji, którą rekomenduje jądro twojego serwera. Instalacja zbyt nowej albo zbyt starej Javy może prowadzić do nieoczekiwanych problemów z wydajnością i kompatybilnością pluginów.
Ustawienia Paper/Purpur
Paper (i jego fork Purpur) zawiera dziesiątki ustawień wpływających na wydajność. Prawidłowa konfiguracja zmniejsza bazowe obciążenie i uwalnia zasoby na obróbkę skoków.
paper-global.yml
chunk-loading:
autoconfig-send-distance: true
enable-frustum-priority: false
global-max-chunk-load-rate: 300.0
global-max-chunk-send-rate: 80.0
global-max-concurrent-loads: 6.0
max-concurrent-sends: 2
min-load-radius: 2
player-max-chunk-load-rate: 100.0
player-max-concurrent-loads: 4.0
target-player-chunk-send-rate: 40.0
global-max-chunk-load-rate: ogranicza prędkość ładowania chunków. Przy bot flood na serwer wchodzą dziesiątki botów naraz, każdy triggeruje ładowanie chunków. Bez limitu natychmiast zjada CPU i dysk.global-max-concurrent-loads: krytycznie ważne. Ogranicza równoległe ładowanie chunków. Domyślna wartość jest za wysoka dla serwerów pod atakiem.
paper-world-defaults.yml
entities:
spawning:
spawn-limits:
monsters: 50
animals: 8
water-animals: 3
water-ambient: 2
water-underground-creature: 3
axolotls: 3
ambient: 1
tick-rates:
monsters: 2
animals: 4
water-animals: 4
water-ambient: 8
ambient: 8
entity-per-chunk-save-limit:
experience_orb: 16
arrow: 8
area_effect_cloud: 4
environment:
optimize-explosions: true
treasure-maps:
enabled: false
find-already-discovered:
loot-tables: true
villager-trade: true
chunks:
max-auto-save-chunks-per-tick: 6
delay-chunk-unloads-by: 10s
entity-per-chunk-save-limit:
area_effect_cloud: 8
arrow: 16
dragon_fireball: 3
egg: 8
ender_pearl: 8
experience_orb: 16
fireball: 8
small_fireball: 8
snowball: 8
tick-rates:
mob-spawner: 2
sensor:
villager:
secondarypoisensor: 80
behavior:
villager:
validatenearbypoi: 60
misc:
redstone-implementation: ALTERNATE_CURRENT
fix-curing-zombie-villager-discount-exploit: true
Kluczowe zmiany:
- Mob spawn limits zmniejszone: mniej mobów = mniej tików entity = większy zapas CPU. Podczas ataku liczy się każdy procent CPU.
- Entity tick rates zwiększone: moby sprawdzane są rzadziej. Wizualnie różnica niewidoczna, ale obciążenie CPU spada znacząco.
optimize-explosions: używa zoptymalizowanego algorytmu do liczenia eksplozji. Armaty TNT nie położą serwera.redstone-implementation: ALTERNATE_CURRENT: alternatywna implementacja redstone od Earthcomputera. 2-3 razy szybsza od waniliowej.- Treasure maps wyłączone: generacja map skarbów może wywołać kolosalne obciążenie na chunk generation.
server.properties
view-distance=8
simulation-distance=5
max-players=100
network-compression-threshold=256
rate-limit=0
view-distance=8: dla większości serwerów 10 chunków to przesada. 8 to dobry balans. Każdy dodatkowy chunk view distance zwiększa obciążenie kwadratowo.simulation-distance=5: osobno od view distance. Entity i redstone tykają tylko w tym promieniu.network-compression-threshold=256: pakiety mniejsze niż 256 bajtów nie są kompresowane. Oszczędza CPU na kompresji małych pakietów.
spigot.yml
settings:
save-user-cache-on-stop-only: true
moved-wrongly-threshold: 0.0625
moved-too-quickly-multiplier: 10.0
timeout-time: 60
restart-on-crash: true
world-settings:
default:
entity-activation-range:
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 16
flying-monsters: 48
merge-radius:
item: 4.0
exp: 6.0
mob-spawn-range: 6
nerf-spawner-mobs: true
arrow-despawn-rate: 300
trident-despawn-rate: 300
Więcej ustawień bezpieczeństwa dla Paper i Spigot opisano w osobnym artykule.
Ustawienia jądra Linux (sysctl)
Jeśli serwer Minecraft działa na dedykowanym serwerze lub VPS z Linuksem, ustawienia jądra mogą kardynalnie wpłynąć na odporność na ataki sieciowe.
Bufory sieciowe
# /etc/sysctl.d/99-minecraft.conf
# Zwiększamy bufory socketów
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
# Bufory TCP (min, default, max)
net.ipv4.tcp_rmem = 4096 1048576 16777216
net.ipv4.tcp_wmem = 4096 1048576 16777216
Po co to potrzebne: domyślne bufory w Linuksie są przewidziane pod zwykłe serwerowe zadania. Serwer Minecraft z 50+ graczami generuje znaczący ruch sieciowy. Powiększone bufory zapobiegają utracie pakietów przy skokach.
Backlog i kolejki połączeń
# Rozmiar kolejki przychodzących połączeń
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# Rozmiar kolejki urządzenia sieciowego
net.core.netdev_max_backlog = 65535
Krytycznie ważne przy DDoS. Kiedy na serwer leci strumień pakietów SYN, kolejka połączeń się zapełnia. Z domyślnym somaxconn=128 legitni gracze nie mogą się podłączyć, nawet jeśli serwer jest w stanie ich obsłużyć. Zwiększenie backlogu do 65535 daje serwerowi czas na obróbkę kolejki.
Tuning TCP
# Ponowne użycie socketów TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
# Szybka utylizacja TIME_WAIT
net.ipv4.tcp_fin_timeout = 15
# Keepalive do wykrywania martwych połączeń
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
# SYN flood protection
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 2000000
tcp_tw_reuse: pozwala ponownie używać socketów w stanie TIME_WAIT dla nowych połączeń. Podczas ataku, kiedy boty łączą się i odłączają, bez tego ustawienia sockety TIME_WAIT mogą wyczerpać dostępne porty.tcp_syncookies: obowiązkowo włączyć. To wbudowana w jądro Linuksa ochrona przed SYN flood. Kiedy kolejka SYN się przepełnia, jądro zaczyna używać SYN cookies zamiast przydzielać zasoby na każdy SYN.tcp_fin_timeout=15: domyślnie 60 sekund. Przy ataku tysiące półotwartych połączeń wisi w FIN_WAIT, zajmując pamięć jądra.
Limity file descriptorów
# /etc/security/limits.conf
minecraft soft nofile 1048576
minecraft hard nofile 1048576
# Albo w systemd unit
[Service]
LimitNOFILE=1048576
Każde połączenie TCP z serwerem = jeden file descriptor. Domyślny limit 1024 albo 4096 skończy się natychmiast przy ataku. Zwiększaj do miliona.
Zastosowanie ustawień
sudo sysctl -p /etc/sysctl.d/99-minecraft.conf
Optymalizacja pluginów
Pluginy to główny konsument zasobów po samym jądrze serwera. Jeden źle napisany plugin może zjadać więcej CPU niż wszystkie pozostałe razem wzięte.
Diagnostyka ciężkich pluginów
/timings on
# Poczekaj 5-10 minut
/timings paste
Spark to bardziej zaawansowana alternatywa:
/spark profiler start
# Poczekaj 5-10 minut
/spark profiler stop
Patrz na dwa parametry:
- Tick time contribution - ile milisekund każdy plugin dokłada do tika
- Thread activity - czy plugin nie blokuje głównego wątku synchronicznymi operacjami
Typowe problemy
Dynmap: generacja mapy świata wywołuje kolosalne obciążenie na CPU i dysk. Jeśli używasz, ogranicz prędkość renderu:
# configuration.txt
renderacceleratethreshold: 10
parallelrendercnt: 2
updaterate: 5000
Pluginy ekonomii z MySQL: synchroniczne zapytania do BD blokują główny wątek. Każdy tik, póki idzie zapytanie SQL, serwer stoi. Upewnij się, że plugin wspiera async-zapytania lub używaj HikariCP connection pool.
WorldEdit/WorldGuard: masowe operacje WorldEdit mogą wywoływać fryzy. Używaj FAWE (FastAsyncWorldEdit) zamiast standardowego WorldEdit.
Pluginy skanujące chunki: niektóre pluginy (Ore Obfuscator, niektóre anticheaty) przechodzą przez bloki w chunkach. To droga operacja. Sprawdź, czy można ograniczyć promień lub częstotliwość skanowania.
Ogólne zasady
- Każdy plugin musi być uzasadniony. "Na wszelki wypadek" - słaby powód.
- Testuj pluginy na testowym serwerze pod obciążeniem przed instalacją na produkcji.
- Aktualizuj pluginy. Deweloperzy często naprawiają wycieki pamięci i optymalizują wydajność w aktualizacjach.
- Nie używaj więcej niż jednego pluginu do tego samego zadania.
Scheduler zadań pluginów
Wiele pluginów używa Bukkit schedulera do wykonywania okresowych zadań. Problem w tym, że domyślnie zadania odpalają się co tik (50 ms). Jeśli masz 30 pluginów i każdy z nich odpala 2-3 zadania co tik, to już 60-90 dodatkowych obróbek na tik.
Sprawdź przez Spark, jakie scheduled tasks odpalają się najczęściej. Niektóre pluginy pozwalają skonfigurować częstotliwość przez konfigurację. Dla tych, które nie pozwalają, rozważ alternatywy albo fork z poprawką.
Folia (eksperymentalny fork Paper) rozwiązuje ten problem przez wielowątkowość, ale wsparcie pluginów tam jest jeszcze ograniczone. Dla większości serwerów Paper/Purpur pozostaje najlepszym wyborem.
Pre-generacja chunków
Generacja nowych chunków to jedna z najcięższych operacji dla serwera Minecraft. Każdy nowy chunk wymaga generacji terenu, struktur, biomów, oświetlenia. Jeden tik generacji może zająć 50-200 ms.
Podczas ataku, jeśli na serwer wchodzą boty i rozlatują się w różne strony, każdy z nich triggeruje generację nowych chunków. Natychmiast zabija to TPS.
Rozwiązanie: Chunky
/chunky radius 5000
/chunky start
Chunky pre-generuje chunki w podanym promieniu. Po generacji te chunki ładowane są z dysku, co jest 10-100 razy szybsze niż generacja od zera.
Rekomendacje:
- Pre-generuj przynajmniej strefę spawnu + główne trasy graczy
- Dla serwerów survival: promień 5000-10000 bloków od spawnu
- Generację lepiej robić nocą lub przy minimalnym online, bo sam proces generacji obciąża serwer
- Ustaw granicę świata (world border), żeby ograniczyć mapę. Oszczędza to i dysk, i zapobiega obciążeniu od eksploracji odległych terenów
/worldborder set 20000
Optymalizacja dysku
NVMe vs HDD
Dla serwera Minecraft prędkość dysku gra ogromną rolę. Chunki ładowane są z dysku, zapisywane na dysk, dane graczy zapisywane na dysk. Podczas ataku, kiedy dziesiątki botów generują operacje I/O, wolny dysk staje się wąskim gardłem.
- NVMe SSD: 3000-7000 MB/s odczyt. Chunki ładują się natychmiast.
- SATA SSD: 500-550 MB/s. Akceptowalne dla małych serwerów.
- HDD: 100-150 MB/s. Niedopuszczalne dla serwerów z 20+ graczami lub serwerów poddawanych atakom.
tmpfs dla plików tymczasowych
# Montowanie tmpfs dla logów
mount -t tmpfs -o size=512M tmpfs /home/minecraft/server/logs
# Albo w fstab
tmpfs /home/minecraft/server/logs tmpfs size=512M,nodev,nosuid 0 0
Logi Minecrafta mogą generować znaczące I/O. Przeniesienie logów do tmpfs (RAM-dysk) uwalnia dyskowe I/O pod ważniejsze zadania: ładowanie chunków i zapis danych.
Scheduler I/O
Dla dysków NVMe:
echo "none" > /sys/block/nvme0n1/queue/scheduler
Dla SATA SSD:
echo "mq-deadline" > /sys/block/sda/queue/scheduler
Dyski NVMe nie potrzebują schedulera I/O, bo obsługują zapytania równolegle. Scheduler none usuwa overhead.
System plików
Dla serwerów Minecraft rekomendowany jest ext4 z parametrami noatime,nodiratime:
# /etc/fstab
/dev/nvme0n1p1 /home/minecraft ext4 defaults,noatime,nodiratime 0 2
Parametr noatime wyłącza aktualizację znacznika czasu ostatniego dostępu przy odczycie pliku. Przy ładowaniu tysięcy plików chunków (region files) zmniejsza to liczbę zapisów na dysk. Jest to szczególnie widoczne pod atakiem, kiedy boty triggerują masowe ładowanie chunków.
Jeśli serwer używa ZFS, skonfiguruj recordsize=128k dla datasetów ze światem. Pliki region Minecrafta dobrze leżą na tym rozmiarze bloku. Włącz też compression=lz4 dla oszczędności miejsca bez widocznego wpływu na wydajność.
Limity połączeń na poziomie serwera
server.properties
max-players=100
Ustaw realistyczny limit. Jeśli twój serwer stabilnie obsługuje 50 graczy, nie stawiaj max-players=1000 "na zapas". Przy ataku boty zapełnią wszystkie 1000 slotów.
Rate limiting
Velocity (rekomendowane proxy) ma wbudowany rate limiter:
# velocity.toml
[advanced]
login-ratelimit = 3000
connection-timeout = 5000
read-timeout = 30000
login-ratelimit = 3000 znaczy minimum 3 sekundy między próbami logowania z jednego IP. Nie zatrzyma to rozproszonego ataku z tysięcy IP, ale odsieje najprostsze bot flood z jednego źródła.
Dla serwera bez proxy używaj pluginów typu LoginSecurity lub AuthMe ze skonfigurowanymi limitami.
Jak stabilność TPS pomaga przy atakach
TPS (Ticks Per Second) = 20 znaczy, że serwer obrabia 20 tików gry na sekundę. Każdy tik zajmuje do 50 ms. Jeśli tik zajmuje więcej niż 50 ms, TPS spada poniżej 20.
MSPT (Milliseconds Per Tick) to dokładniejsza metryka. Serwer z MSPT 30 ms ma 20 ms zapasu. Serwer z MSPT 48 ms ma tylko 2 ms zapasu.
Przy ataku DDoS każde dodatkowe obciążenie zwiększa MSPT:
- Obróbka pakietów botów: +5-15 ms
- Ładowanie chunków dla nowych połączeń: +10-50 ms
- Zwiększenie GC pressure: +5-20 ms
Serwer z MSPT 30 ms wytrzyma dodatkowe 20 ms obciążenia i zostanie na 20 TPS. Serwer z MSPT 48 ms spadnie do 10-15 TPS, gracze zaczną lagować i się odłączać.
Monitoring MSPT
/spark tps
/spark tickmonitor
Cel: trzymać MSPT poniżej 35 ms w normalnym trybie, żeby zostawał zapas na skoki.
Zmniejszanie powierzchni ataku
Optymalizacja to nie tylko prędkość. To też zmniejszanie tego, co atakujący może wykorzystać.
Wyłącz Query
# server.properties
enable-query=false
Protokół Query (UDP port 25565) pozwala uzyskać informacje o serwerze. Atakujący używają go do rekonesansu i ataków amplification.
Wyłącz RCON, jeśli nie używasz
enable-rcon=false
RCON to zdalna konsola. Jeśli jest otwarta do internetu, to bezpośredni wektor do bruteforce i eksploitacji.
Ogranicz broadcast
# paper-global.yml
proxies:
bungee-cord:
online-mode: true
velocity:
enabled: true
online-mode: true
secret: 'twój-sekretny-klucz'
Jeśli używasz proxy, włącz je przez secret key. To zapobiega bezpośredniemu podłączaniu do serwera backend z pominięciem proxy.
Whitelist w sytuacjach awaryjnych
/whitelist on
Jeśli atak jest za silny i filtracja sobie nie radzi, tymczasowy whitelist pozwoli grać tylko zarejestrowanym graczom. Nie idealne rozwiązanie, ale lepsze niż pełny downtime.
Kompleksowy checklist optymalizacji
Oto krótki checklist, który można przejść w jeden wieczór:
JVM:
- Aikar's flags ustawione
-
-Xms=-Xmx - RAM nie więcej niż 12-16 GB na instancję
- GraalVM rozważony jako alternatywa
Paper/Purpur:
- Mob spawn limits zmniejszone
- Entity tick rates zwiększone
- Chunk loading rate ograniczona
- View distance = 8 lub mniej
- Simulation distance = 5
-
optimize-explosions: true -
redstone-implementation: ALTERNATE_CURRENT
Linux kernel:
-
somaxconn = 65535 -
tcp_max_syn_backlog = 65535 -
tcp_syncookies = 1 -
rmem_maxiwmem_maxzwiększone -
nofilelimit zwiększony -
tcp_fin_timeoutzmniejszony
Pluginy:
- Spark profiling przeprowadzony
- Ciężkie pluginy wymienione lub zoptymalizowane
- Sync zapytania SQL wymienione na async
- Nieużywane pluginy usunięte
Dysk i sieć:
- NVMe/SSD używany
- Chunki pre-generowane (Chunky)
- World border ustawiony
- Query i RCON wyłączone
Monitoring:
- Spark zainstalowany
- MSPT monitorowany
- Alerty na TPS < 18 skonfigurowane
Optymalizacja + zewnętrzna ochrona = maksymalna odporność
Ważne, żeby zrozumieć: optymalizacja serwera nie zastępuje ochrony DDoS. Uzupełnia ją. Żadne ustawienia sysctl nie uratują od 10 Gbit/s UDP flood. Do tego potrzebna jest filtracja ruchu na poziomie sieci.
Ale połączenie "zoptymalizowany serwer + jakościowa filtracja" (na przykład przez MineGuard) daje maksymalną odporność. Filtr odsiewa 99% śmieciowego ruchu, a zoptymalizowany serwer spokojnie trawi pozostały 1%, który się przedostał.
Wybór hostingu też gra rolę. Więcej o tym, na co zwracać uwagę przy wyborze hostingu z ochroną DDoS, przeczytasz tutaj.
Podsumowanie
Optymalizacja serwera Minecraft to nie jednorazowa akcja, tylko ciągły proces. Każda aktualizacja jądra, każdy nowy plugin, każda zmiana obciążenia może przesunąć balans. Regularnie rób profilowanie przez Spark, śledź MSPT, sprawdzaj ustawienia sysctl po aktualizacji jądra Linuksa.
Zapas wydajności to twoje ubezpieczenie. Im większy headroom ma serwer w normalnym trybie, tym większe szanse, że przeżyje atak i twoi gracze nawet nie zauważą, że coś się stało.
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 zrobić launcher do serwera Minecraft
Pełny przewodnik po tworzeniu własnego launchera do serwera Minecraft: popularne silniki, auto-aktualizacja modów, skórki, Electron, alternatywy w postaci modpacków, hosting i bezpieczeństwo.
Nowa lokalizacja filtrująca w Rosji - Moskwa
MineGuard uruchomił lokalizację filtrującą w Moskwie. Gracze z WNP dostaną 30-40ms mniej pingu, a ruch z Europy i Ukrainy nadal idzie przez Niemcy. Opowiadamy, jak to działa i komu warto podłączyć.
Serwer Minecraft SMP w 2026 - Jak Stworzyć i Skonfigurować
Pełny przewodnik SMP: wybór core (Paper, Purpur, Folia, Fabric), flagi JVM, tuning server.properties i paper.yml, pre-generacja, pluginy do claimów i ekonomii, anti-cheat Grim vs Vulcan, anti-bot, voice chat, kopie 3-2-1, monetyzacja bez pay-to-win i ochrona DDoS.