// Minecraft

spark: jak znaleźć źródło lagów na serwerze Minecraft

spark: jak znaleźć źródło lagów na serwerze Minecraft

spark to standardowy profiler dla serwerów Minecraft: mierzy, który kod, który mod albo który chunk zjada czas ticka, dzięki czemu nie musisz zgadywać. Serwer chodzi w tempie 20 ticków na sekundę, więc każdy tick ma 50 milisekund. Jeśli tick regularnie trwa dłużej, TPS spada i wszystko robi się ciągnące. Dzięki /spark profiler, /spark tps i /spark heapsummary zwykle w pięć minut masz konkretnego podejrzanego.

Co dokładnie robi profiler?

Profiler wiele razy na sekundę sprawdza, czym zajmuje się główny wątek serwera, i zapisuje pełny łańcuch wywołań: od głównej pętli, przez element, który akurat jest przetwarzany, aż po konkretną metodę w pluginie lub modzie. Tysiące takich migawek razem pokazują, gdzie ucieka czas. Nazywa się to samplingiem i to właśnie dlatego spark prawie nie obciąża serwera.

Różnica względem zgadywania jest ogromna. „Ten plugin wydaje się ciężki” to odczucie, a „jedna trzecia czasu ticka idzie na pathfinding mobów w jednym miejscu” to pomiar. spark niczego nie naprawia, tylko wskazuje, gdzie problem siedzi.

Jak zainstalować spark na serwerze?

spark istnieje jako plugin dla Bukkit, Spigot, Paper i Purpur, jako mod dla Fabric, Forge i NeoForge oraz jako build dla proxy w rodzaju BungeeCord i Velocity. Pobierz jednak właściwy wariant: plik pluginu nic nie zdziała w folderze z modami.

  1. Najpierw wpisz /spark tps w konsoli; część oprogramowania serwerowego dostarcza spark od razu.
  2. Jeśli go nie ma, pobierz właściwy build: plugin trafia do plugins/, mod do mods/.
  3. Wgraj plik przez menedżer plików w panelu albo przez SFTP. W panelu Pterodactyl wystarczy przeciągnąć go bezpośrednio na okno.
  4. Zrestartuj serwer w całości. Nie używaj /reload — na Paper częściej psuje, niż naprawia.
  5. Nadaj sobie uprawnienia w LuckPerms: /lp user TwojNick permission set spark true. Bez uprawnień zadziała tylko konsola.

spark jest darmowy i open source, więc nie bez powodu pojawia się w każdym zestawieniu kluczowych pluginów obok EssentialsX, LuckPerms i CoreProtect.

Co mówią ci /spark tps i /spark health?

/spark tps pokazuje TPS z ostatnich 5 i 10 sekund oraz z 1, 5 i 15 minut, a do tego MSPT: ile milisekund naprawdę kosztuje jeden tick. MSPT jest uczciwszą liczbą, bo TPS trzyma się na 20 tak długo, jak serwer ledwo nadąża. 20 TPS przy 45 ms to co innego niż 20 TPS przy 12 ms: ten pierwszy położy się, gdy dojdzie dziesięciu graczy.

Przy MSPT dostajesz też medianę i wyższe percentyle. /spark health dokłada do tego zużycie CPU, zużycie pamięci, czas spędzony w garbage collection oraz ilość wolnego miejsca na dysku.

PomiarWytycznaCo z tym zrobić
MSPT poniżej 30 msJest zapasNic, możesz rosnąć
MSPT od 30 do 50 msCiasnoOdpal profiler, zanim się posypie
MSPT powyżej 50 msTPS spada poniżej 20Odpal profiler w trakcie lagów
Niska mediana, wysoki 95. percentylSkokiSzukaj autozapisu, generowania chunków lub zadania na timerze

Jak odpalić /spark profiler w odpowiednim momencie?

Najważniejsza zasada: profiluj wtedy, gdy lagi faktycznie są. Raport ze spokojnego niedzielnego poranka nic nie powie o piątkowym szczycie wieczorem. Zacznij od /spark profiler start, daj mu chodzić od trzech do pięciu minut i zamknij sesję komendą /spark profiler stop. Dostaniesz link do przeglądarki raportu online, którym możesz podzielić się z ekipą albo z supportem.

Kilka opcji robi realną różnicę:

  • --timeout 300 zatrzymuje sesję automatycznie po 300 sekundach, na wypadek gdybyś sam zapomniał.
  • --only-ticks-over 100 bierze pod uwagę tylko ticki, które trwały dłużej niż 100 ms. Idealne przy zacięciach, gdy średni MSPT wygląda dobrze.
  • --thread * profiluje wszystkie wątki, nie tylko główny. Na serwerach z modami generowanie chunków często siedzi w osobnych wątkach.
  • --alloc mierzy nie czas, lecz alokację pamięci: który kod produkuje najwięcej śmieci.

W trakcie sesji poproś gracza, żeby przeleciał nad problematyczny obszar; krótki raport przeczytasz szybciej niż godzinę szumu.

Jak czytać raport spark i się w nim nie zgubić?

Przeglądarka otwiera się drzewem. Na samej górze stoi główna pętla serwera z wynikiem około 100 procent. Ta liczba nic nie mówi, bo z definicji idzie tam cały czas. Rozwijaj więc po kolei najcięższą gałąź, aż procenty rozsypią się na dziesięć gałązek po kilka procent. Ostatnia gałąź, która wciąż zabiera spory kawałek, to twój podejrzany. Jeśli widzisz 60 procent w gałęzi nazwanej po prostu „tick”, to znaczy, że nie zszedłeś dostatecznie głęboko.

Dwie rzeczy to przyspieszają. spark potrafi przypisać zmierzony czas do źródła, czyli do pluginu albo moda, z którego pochodzi kod; to daje pierwszą trójkę w dziesięć sekund. Pomagają też nazwy pakietów: jeśli widzisz net.minecraft, serwer wykonuje pracę vanilla, taką jak entity, chunki i redstone. Uwaga jednak: plugin, który spawnuje tysiąc mobów, pokaże się jako koszt mobów, a nie jako koszt tego pluginu.

Jakie przyczyny wychodzą w praktyce najczęściej?

Cztery znaleziska pokrywają większość raportów, które do nas trafiają.

Za dużo entity w jednym miejscu

Farmy mobów bez mechanizmu zabijania, setki luźnych itemów w tunelu, sterta łódek na placu spawnu. W raporcie czas ucieka na tickowanie entity albo na spawnowanie mobów. Paper potrafi pokazać dla każdego świata, ile entity jakiego typu i gdzie stoi; teleportuj się tam i od razu wszystko jest jasne.

Plugin, który robi coś w każdym ticku

Klasyk: scoreboard albo hologram odświeżany dwadzieścia razy na sekundę, który przy okazji przelatuje przez wszystkich graczy. Przy dziesięciu graczach nic nie zauważysz, przy osiemdziesięciu ląduje na szczycie listy. Zejście z każdego ticka na raz na sekundę to dwadzieścia razy mniej pracy, o ile plugin na to pozwala.

Łańcuchy hopperów

Hoppery bez przerwy sprawdzają, czy coś leży nad nimi albo obok nich. Długie rzędy pod pełnymi skrzyniami i systemy sortujące z kilkudziesięciu bloków sumują się mocno. Paper ma opcje, które te sprawdzenia ograniczają, a często część łańcucha jest po prostu zbędna.

Za wysoki view-distance

Każdy krok w górę kosztuje kwadratowo więcej chunków na gracza; domyślna wartość 10 oznacza 21 na 21 chunków wokół każdego. Ponieważ simulation-distance ustawia się osobno, możesz pozwolić graczom patrzeć daleko, a tickować entity i redstone tylko blisko. Zwykle to najtańszy zysk.

view-distanceChunki na graczaRóżnica względem 10
12625+42 procent
10 (domyślnie)441punkt odniesienia
8289-34 procent
6169-62 procent

Co robić dalej, opisujemy w artykule o optymalizacji serwera Minecraft i zmniejszaniu lagów. Zmieniaj jedną rzecz naraz i mierz od nowa, inaczej nie dowiesz się, która zmiana zadziałała.

Kiedy potrzebujesz /spark heapsummary?

/spark heapsummary pokazuje, co w danym momencie siedzi w pamięci: dla każdej klasy liczbę obiektów i liczbę bajtów, posortowane według rozmiaru. Używasz go, gdy zużycie pamięci ciągle rośnie, gdy garbage collection powoduje długie pauzy albo gdy serwer po kilku godzinach zwalnia, a restart naprawia wszystko.

Odpowiedź często stoi w pierwszych dziesięciu wierszach: miliony obiektów entity wskazują na tę samą przepełnioną farmę. Przy ciężkich modpackach chodzi zwyczajnie o skalę: All the Mods 10 działa na NeoForge z Minecraft 1.21.1 i 400 do 500 modami, wymaga minimum 10 GB RAM, 12 GB dla małej grupy oraz 14 do 16 GB przy pięciu lub więcej graczach z dużą automatyzacją. FerriteCore oszczędza tam 30 do 40 procent pamięci, a Canary i ModernFix pomagają na tym samym loaderze.

Bądź szczery co do granic: heapsummary to migawka, a nie analiza wycieków. Jeśli chcesz wiedzieć, który dokładnie obiekt coś przytrzymuje, potrzebujesz heap dumpa plus narzędzia w rodzaju Eclipse MAT. To robota specjalistyczna i rzadko potrzebna na zwykłym serwerze survival.

Kiedy spark ci nie pomoże?

TPS stoi na 20, MSPT jest daleko poniżej 50 ms, a gracze i tak narzekają na rubberbanding? Wtedy problem nie siedzi w pętli ticków, tylko w połączeniu: utrata pakietów, kiepska trasa albo atak. spark ma na to /spark ping, dzięki któremu widzisz pingi swoich graczy obok siebie. Jeśli wygląda to na coś złośliwego, bardziej przyda ci się nasz artykuł o radzeniu sobie z atakami DDoS na serwer do gier niż profiler.

spark nie powie ci też, czy twój sprzęt jest za wolny. Minecraft mocno opiera się na jednym rdzeniu, więc stary procesor z wieloma rdzeniami wypada słabo. Jeśli widzisz głównie zadania vanilla, które wszędzie trwają odrobinę za długo, bez wyraźnego wyskoku, to opcje konfiguracyjne się skończyły i uczciwym wnioskiem jest szybszy sprzęt. W hostingu Minecraft od MC-Node linia budżetowa chodzi na AMD EPYC 7443P, a linia premium na AMD Ryzen 9 9950X — ta druga jest przeznaczona dla serwerów, które zatykają się na jednym wątku.

Najczęściej zadawane pytania

Czy sam spark kosztuje wydajność? Prawie nie. spark działa na samplingu i robi migawki, zamiast liczyć każde wywołanie. Spokojnie zostaw go na stałe; bez aktywnej sesji praktycznie nic nie robi. Tylko podczas /spark profiler pojawia się niewielkie dodatkowe obciążenie.

Czy spark działa też na serwerach z modami? Tak, są buildy dla Fabric, Forge i NeoForge. Na packu takim jak All the Mods 10, który chodzi na NeoForge i Minecraft 1.21.1 oraz wymaga Java 21, spark jest szczególnie przydatny: przy 400 do 500 modach zgadywanie nie ma sensu. Użyj tam --thread *.

Czym różni się /spark tps od /spark profiler? /spark tps to termometr: mówi, czy serwer nadąża i ile kosztuje tick. /spark profiler to śledztwo, które tłumaczy dlaczego. Zacznij od tps i health, a profiler odpal w trakcie problemu.

Czy mam zainstalować ClearLagg, jeśli spark znajduje dużo entity? Możesz, ale to plaster: ClearLagg cyklicznie sprząta itemy, podczas gdy farma, która je produkuje, dalej działa. Najpierw usuń źródło, a ClearLagg zostaw jako siatkę bezpieczeństwa, nie odwrotnie.

Warto przeczytać

// WYPRÓBUJ SAM
Twój serwer online w 60 sekund
MC-Node →