Jak naprawić lagi na serwerze za pomocą profilera Spark?
W tym artykule
Twój serwer wyraźnie zwalnia: bloki wracają po zniszczeniu, moby zamierają, komendy reagują z opóźnieniem, a w konsoli pojawia się Can't keep up! Is the server overloaded?. Nie musisz zgadywać, która farma albo który plugin zawinił — darmowy profiler Spark dokładnie mierzy, gdzie każdy tick traci czas. W tym poradniku zainstalujesz Sparka, zrobisz profil w trakcie lagów i zamienisz raport na konkretną poprawkę.
Najpierw podstawy: TPS, MSPT i „Can't keep up”
Serwer Minecraft działa w tempie 20 ticków na sekundę (TPS). W każdym ticku serwer aktualizuje cały świat i ma na to maksymalnie 50 milisekund. MSPT (milliseconds per tick) to czas, jaki tick faktycznie zajmuje. Dopóki MSPT trzyma się poniżej 50, serwer płynnie osiąga 20 TPS; gdy go przekroczy, TPS spada i dosłownie wszystko na serwerze zwalnia.
Komunikat Can't keep up! Is the server overloaded? Running 2000ms or 40 ticks behind oznacza dokładnie to: ticki trwały za długo, serwer nie nadąża i pomija ticki, żeby nadrobić zaległości. Jednorazowo przy starcie to nic groźnego; jeśli komunikat wraca podczas gry, masz prawdziwe lagi serwera.
Najpierw sprawdź, czy problem na pewno leży po stronie serwera. Niskie FPS lub przycinający się obraz (zwłaszcza z shaderami) to lagi klienta; rubberbanding przy wysokim pingu to lagi połączenia. Wpisz /spark tps: jeśli widzisz równe 20 TPS przy niskim MSPT, szukaj przyczyny po stronie klienta lub sieci.
Krok 1: Zainstaluj Sparka
- Jeśli używasz Papera lub Purpura 1.21 lub nowszego, Spark jest już wbudowany. Wpisz
spark tpsw zakładce Console panelu MC-Node; jeśli dostaniesz odpowiedź, przejdź od razu do kroku 2. - W przeciwnym razie pobierz Sparka ze strony spark.lucko.me/download. Wybierz wersję Bukkit dla Paper/Spigot albo wersję Fabric/Forge/NeoForge dla serwera z modami.
- Otwórz zakładkę Files w panelu i wgraj plik jar do folderu
plugins(na serwerze z modami:mods). - Zrestartuj serwer z zakładki Console i sprawdź komendą
spark tps, że wszystko działa.
Krok 2: Profiluj w trakcie lagów
Największa pułapka: profilowanie pustego lub świeżo zrestartowanego serwera. Bez graczy farmy, hoppery i chunki odpowiedzialne za lagi po prostu nie pracują, więc raport niczego nie pokaże. Uruchom profiler dokładnie wtedy, gdy lagi naprawdę występują, z graczami online.
- Poczekaj, aż lagi się pojawią, albo poproś graczy o odtworzenie sytuacji (na przykład przy podejrzanej farmie).
- Wpisz w konsoli:
spark profiler start --timeout 300. Profiler mierzy przez 5 minut i zatrzymuje się sam. Bez--timeoutzatrzymasz go ręcznie komendąspark profiler stop. - Niech wszyscy grają normalnie dalej; sam pomiar prawie nie obciąża serwera.
- Po zakończeniu konsola wypisze link do
spark.lucko.me. Otwórz go w przeglądarce.
Krok 3: Odczytaj raport
- U góry widzisz TPS i MSPT z czasu pomiaru — tak potwierdzisz, że faktycznie udało się uchwycić lagi.
- Otwórz drzewko pod wątkiem serwera i rozwijaj za każdym razem wiersz z najwyższym procentem. W ten sposób dojdziesz do zadania, które pochłania najwięcej czasu ticka.
- Rozpoznaj wzorce: dużo czasu w
entityTicklub AI mobów wskazuje na zbyt wiele entities;HopperBlockEntityna linie hopperów;chunk generationlubServerChunkCachena ładowanie chunków; a nazwa pakietu w stylucom.przyklad.nazwapluginuwskazuje konkretny plugin jako winowajcę.
Częste przyczyny i ich rozwiązania
- Za dużo entities — Zwykle farmy mobów albo porozrzucane przedmioty. Ustaw
/gamerule maxEntityCramming 8(domyślnie 24), obniżspawn-limitswbukkit.ymlorazentity-activation-rangewspigot.yml, a dużym farmom dodaj włącznik. - Hoppery — Długie linie hopperów sprawdzają zawartość w każdym ticku. Zwiększ w
bukkit.ymlwartośćticks-per.hopper-transfer(na przykład z 8 na 16), a na Paperze ustaw wconfig/paper-world-defaults.ymlopcjęhopper.cooldown-when-fullnatrue. Bardzo długie linie zastąp strumieniami wody z mniejszą liczbą hopperów. - Ładowanie chunków i generowanie świata — Eksplorujący gracze zmuszają serwer do generowania nowych chunków. Obniż w
server.propertieswartośćsimulation-distance(na przykład do 6) i ewentualnieview-distance, ustaw granicę świata i wygeneruj świat z wyprzedzeniem pluginem Chunky:/chunky radius 3000, a następnie/chunky start. - Jeden plugin na szczycie raportu — Najpierw zaktualizuj plugin, wyłącz ciężkie funkcje (skany, animacje, hologramy) w jego configu albo poszukaj lżejszej alternatywy. Możesz to przetestować, przenosząc tymczasowo plik jar poza folder
pluginsi restartując serwer. - „Can't keep up” tylko przy starcie — Nic groźnego: serwer nadrabia pik startowy. Reaguj tylko wtedy, gdy komunikat wraca podczas normalnej gry.
- TPS wynosi 20, a gracze i tak narzekają — To lagi klienta lub sieci: zmniejsz render distance albo wyłącz shadery po stronie klienta, albo sprawdź ping.
Dalsza optymalizacja
Pracujesz jeszcze z /timings? Nasz artykuł o tworzeniu timings jest przestarzały; Spark to jego nowoczesny następca. Strukturalne usprawnienia znajdziesz w naszym poradniku optymalizacji, a o tym, czy winowajcą jest zbyt mała ilość pamięci, przeczytasz w poradniku o RAM. Nadal nie działa? Otwórz ticket przez naszą stronę pomocy i wklej link do swojego raportu Spark — chętnie na niego zerkniemy.
Uruchom swój serwer w 60 sekund na naszym własnym sprzęcie.