Odkrywamy przyczyny lagów Sparkiem

Ten artykuł przeczytasz w około 8 minut

Spark to plugin/modyfikacja na większość dostępnych silników, pozwalająca odkryć co laguje na naszym serwerze.

Wymagania

  • Jeden ze wspieranych silników:
    • Bukkit (Spigot, Paper lub Purpur)
    • Fabric
    • Forge 1.12.2 lub 1.16.3+
    • Sponge
    • Nukkit
    • BungeeCord
    • Velocity

Skąd pobrać?

Najnowszą wersję pobierzesz stąd, wybierz prawidłową dla swojego zainstalowanego silnika. Jeśli używasz serwera Vanilla, możesz np. tymczasowo zainstalować Papera i użyć wersji Bukkit.

Instalacja

Przykładowa instalacja pluginu na Spigocie dla wersji Minecrafta 1.17.1.

W pierwszej kolejności zaloguj się na swoje konto BedrockHost.pl i przejdź do panelu Twojego hostingu.

Następnie przejdź do menedżera plików.

Menedżer plików

Przejdź do odpowiedniego folderu i wyślij plik z pobranym pluginem Spark, bądź użyj opcji Pobierz z URL.

  • mods – w przypadku silnika Forge bądź Fabric
  • mods/plugins – w przypadku silnika Sponge
  • plugins – w przypadku silników Bukkit, Sponge, Nukkit, Bungeecord, Velocity
Pobrany plugin BlueMap

Teraz wróć do konsoli, zrestartuj serwer i poczekaj na jego ponowne uruchomienie.

Restart serwera

Sposób użycia

Gdy nasz serwer działa z zainstalowanym Sparkiem możemy sprawdzić komendą spark tps lub tps czy są lagi.

Rezultat komendy /spark tps

Co możemy z tej komendy odczytać?

  • TPS - ilość ticków w ciągu jednej sekundy, maksymalna możliwa wartość to 20
  • Tick durations - czas trwania 1 ticku w milisekundach

Jeśli wartość TPS lub Tick durations jest podświetlona na:

  • zielono - lagów nie ma, lub są one bardzo małe, niezauważalne
  • żółto - lagi występują, ale mogą nie być odczuwalne - jeśli utrudniają rozgrywkę warto zacząć myśleć o sprawdzaniu co je powoduje
  • czerwono - lagi są mocno odczuwalne, koniecznie sprawdź czym są spowodowane

Jak zdiagnozować co laguje na moim serwerze?

Służy do tego komenda spark profiler, którą wpisujemy gdy na serwerze są lagi i zatrzymujemy komendą spark profiler --stop po kilkunastu sekundach, aby sprawdzić jej rezultat. W przypadku gdy TPS mamy podświetlony na zielono, wyniki mogą być niemiarodajne.

Dla testów zainstalowałem także plugin WorldBorder, wszedłem na serwer i wpisałem komendy, aby wygenerować nim świat. Na rezultat nie musiałem długo czekać i od razu po wpisaniu spark tps zobaczyłem że są lagi i natychmiast uruchomiłem spark profiler.

Niski TPS serwera widoczny po użyciu /spark tps

Po prawie dwóch minutach zakończyłem sprawdzanie komendą spark profiler --stop. Otrzymujemy wtedy adres na który wchodzimy:

Tylko co my możemy z tego odczytać?

Może to się wydawać skomplikowane, ale musimy się kierować procentami podanymi po prawej stronie metod. Jest to procent czasu ile zajęło wykonywanie danej metody w czasie włączonego sprawdzania. Po najechaniu możemy sprawdzić czas w milisekundach. Oczywiście wątek serwera (Server thread) będzie zawsze zajmował 100% czasu, więc rozwijamy go, aby dowiedzieć się więcej.

Widzimy głównie dwie metody - tickServer oraz sleepForTick. W zależności od wersji Minecrafta oraz użytego silnika nazwy te mogą się nie pokrywać, więc nie sugeruj się mocno nimi. Pierwsza odpowiada za tickowanie na serwerze i jak widać zajmuje aż 99%! Sugeruje nam to, że warto się zainteresować co kryje się pod nią dalej.

Po rozwinięciu widzimy metodę Bukkita zajmującą aż 88%! Nazwa niestety za dużo nie mówi co to może być, jedynie że jest to coś zaplanowanego. Rozwińmy dalej.

CraftTask również za dużo nie mówi, rozwijam dalej.

O proszę a co to? WorldFillTask. Po najechaniu widzimy, że Spark potrafi także odczytać z jakiego pluginu jest ta metoda. Zgadza się, to WorldBorder, którym właśnie generuję mapę. Używałem przecież do tego komendy wb fill.

Dalsza część Sparka jest w zasadzie mało istotna, bo wiemy już co nam laguje - generacja mapy i możemy ją zatrzymać. Jest ona natomiast bardzo potrzebna dla osób, które chciałyby np. naprawić dany plugin czy modyfikację, ponieważ niezawsze jest prosty sposób na rozwiązanie problemów z lagami. Każdy przypadek lagów jest inny i nie da się w tym poradniku jednoznacznie określić co laguje na Twoim serwerze.

Lag spike czyli "szpilki"

Przykład tzw. "szpilek" (lag spikes)

Na tym rezultacie spark tps widzimy, że TPS-y na chwilę spadły, ale są już w normie. Nazywamy to zjawisko "szpilkami" i są one wyjątkowo bardzo odczuwalne dla graczy, jeśli są częste. Niby 20 TPS i faktycznie inne pluginy (np. edytujące ekran pod przyciskiem TAB) mogą pokazywać te 20 TPS, jednak gracze lagi odczuwają.

Jak zdiagnozować szpilki?

Szpilki są cięższe do zdiagnozowania niż normalne lagi, ale nie niemożliwe. Pomocny okaże się nam argument only-ticks-over, który pokaże nam tylko metody, które trwały wyjątkowo dłużej niż normalne. Diagnozowanie szpilek radziłbym od rozpoczęcia z wartością 50, czyli wpisaniem komendy spark profiler --only-ticks-over 50 i zostawienia jej na kilka minut, od czasu do czasu obserwując, czy na spark tps była widoczna szpilka w momencie działania komendy. Zalecane wartości dla parametru only-ticks-over

  • 50 - w przypadku krótkich szpilek
  • 200 - w przypadku dłuższych spowolnień serwera

Przykłady szpilek

  • zapis lub odczyt mapy/świata z dysku - przykładowo wchodząc portalem do Netheru serwer musi go załadować - wtedy inni mogą odczuć chwilowego laga
  • generowanie mapy - jak widać może ono bardzo boleć, dlatego warto wcześniej ją wygenerować np. za pomocą pluginu WorldBorder
  • źle napisane pluginy/modyfikacje - spotkaliśmy się z przykładami tragicznie napisanych modyfikacji, które robiły skomplikowane obliczenia w 1 ticku, zamiast je rozłożyć na kilka, lub pluginów, które wysyłają zapytania do bazy danych na wątku świata, nie róbcie tak i korzystajcie z wielowątkowości oraz systemu ticków

Logo BedrockHost.pl
BedrockHost.pl
© IBC-GAMES 2024
Nasze dane
  • BedrockHost.pl jest własnością firmy:
  • Remigiusz Machula - IBC-GAMES
  • NIP: 8842583035
  • REGON: 366776613