Jak naprawić błąd „Can't keep up!" na serwerze Minecraft
Ostrzeżenie „Can't keep up! Is the server overloaded?" pojawia się wtedy, gdy serwer nie nadąża z tickami. Pokazujemy, jak zdiagnozować przyczynę i ją usunąć.
Komunikat Can't keep up! Is the server overloaded? Running 5000ms or 100 ticks behind w logu serwera Minecraft to klasyk. Pojawia się, gdy serwer nie nadąża z wykonaniem 20 ticków na sekundę i „stara się dogonić" zaległości. Symptomy: lagi, opóźnienia, gracze narzekają na rubber-banding.
Pokazujemy, jak zdiagnozować przyczynę i ją usunąć — krok po kroku.
Co dokładnie oznacza ten błąd?
Minecraft działa na 20 TPS — każdy tick trwa idealnie 50 ms. Gdy operacje w jednym ticku zajmują dłużej, kolejne ticki zaczynają się opóźniać. Po przekroczeniu progu (zwykle 5 sekund opóźnienia) Minecraft loguje ostrzeżenie i próbuje „pominąć" ticki, by nadrobić.
Skutek: część logiki świata (moby, redstone, despawning) nie wykonuje się przez chwilę. Gracze widzą zamrożone obiekty, opóźnione bloki, zacinanie się.
Krok 1 — Diagnoza sparkiem
Bez profilowania zgadujesz. spark pokaże dokładnie, co zżera czas:
/spark profiler --timeout 60
/spark health
Po 60 sekundach dostaniesz link do raportu. Najważniejsze sekcje:
- Top entries by total time — co zajmuje najwięcej CPU.
- Plugins — który plugin spożywa CPU.
- GC time — ile spędzamy w garbage collectorze.
Krok 2 — Entity
/spark health pokaże liczbę entity. Jeśli przekracza 5000:
- najprawdopodobniej masz farmy zwierząt na 200+ sztuk,
- albo nieusunięte itemy po śmierciach (long-distance arena),
- albo źle skonfigurowane spawnery.
Polecane:
# spigot.yml
spawn-limits:
monsters: 50
animals: 8
# paper.yml (ostrożnie, zmienia mechanikę)
entities:
spawning:
per-player-mob-spawns: true
despawn-ranges:
monster:
soft: 28
hard: 96
Plus FarmLimiter — automatyczne usuwanie nadmiaru zwierząt.
Krok 3 — Hoppery
Hoppery są drugim najczęstszym sprawcą. /spark profiler pokaże HopperBlockEntity#tick jako jeden z największych zużywających CPU.
Naprawa:
# paper.yml
ticks-per:
hopper-transfer: 8
hopper-check: 8
Plus plugin HopperLagFix, który automatycznie wyłącza nieużywane hoppery (te, które nie miały transferu od X minut).
Krok 4 — Złe pluginy
Niektóre pluginy są napisane fatalnie. Synchroniczne SQL, pełne skanowanie świata co tick, brak cache'owania. Spark pokaże nazwę pluginu w sekcji „Plugins by total time".
Najczęstsi winowajcy:
- stare wersje Towny / Factions (2018-2019),
- pluginy „shop GUI" napisane w pośpiechu,
- pluginy z synchroniczną integracją Discord / web,
- customowe pluginy z synchronicznym I/O.
Rozwiązanie: aktualizacja, podmiana na alternatywę, kontakt z autorem.
Krok 5 — RAM i GC
Jeśli /spark health pokazuje GC time powyżej 5%, problem jest w pamięci. Skutki: serwer co 2–3 minuty zamarza na sekundę.
Pierwsze działanie — dodaj 2–4 GB do -Xms i -Xmx. Drugie — włącz Aikar Flags (jeśli jeszcze nie):
java -Xms6G -Xmx6G \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+ParallelRefProcEnabled \
-XX:+DisableExplicitGC \
-jar paper.jar --nogui
Trzecie (jeśli nadal źle) — przejście z G1GC na ZGC.
Krok 6 — Wolny dysk
Tani VPS z dyskiem SATA SSD generuje powolne zapisy chunków. Spark pokaże dużo czasu w ChunkSerializer.
Naprawy:
sync-chunk-writes=falsew server.properties,- NVMe zamiast SATA SSD (zmiana hostingu),
- tmpfs dla świata (ostrożnie, ryzyko utraty przy padzie).
Krok 7 — Redstone
Skomplikowane układy redstone (zegary 1-tickowe, wielkie maszyny obliczeniowe) potrafią sprowadzić serwer na kolana. /spark profiler pokaże BlockRedstoneTorch i podobne.
Włącz Alternate Current:
# paper.yml
redstone-implementation: ALTERNATE_CURRENT
Plus rozmowa z graczem buddującym monstra — czasem trzeba ograniczyć rozmiar/szybkość.
Krok 8 — ostatecznosc
Jeśli wszystko powyżej zawodzi:
- Sprawdź
htopiiotop— czy CPU/dysk są zarzucone procesami spoza Minecrafta. - Czy hosting nie ma „neighbour effect" (sąsiad na VPS zżera zasoby).
- Czy serwer ma realny CPU, a nie shared (oversold).
- Może czas na lepszy sprzęt.
Prewencja — by błąd nie wracał
- Ustaw alert Discord przy spadku TPS < 18 (plugin SimpleAlert).
- Cotygodniowo przejrzyj
/spark profilerw godzinach szczytu. - Aktualizuj pluginy raz w miesiącu.
- Trzymaj liczbę entity poniżej 3000.
- Pre-generuj nowe regiony świata przed otwarciem dla graczy.
Podsumowanie
„Can't keep up!" to symptom, nie choroba. W 90% przypadków to za dużo entity, źle skonfigurowane hoppery, słaby plugin albo brak Aikar Flags. Profilowanie sparkiem jest absolutnie kluczowe — bez niego strzelasz po omacku.
Rozwiązanie zwykle zajmuje 30–60 minut, jeśli wiesz, czego szukasz. Z tym przewodnikiem wiesz.