Discord
Wiki - Pluginy

spark - profiler wydajności serwera

spark to lekki profiler wydajności stworzony przez Lucko (autora LuckPerms). Generuje flame graphy pokazujące dokładnie, co powoduje lag na serwerze. Analizuje TPS, zużycie CPU, pamięci i garbage collectora. Wbudowany w Paper od 1.21, dostępny też na Spigot, Fabric i Forge.

Czas czytania: ~5 min Platforma: Paper / Spigot / Fabric / Forge / BungeeCord / Velocity

Co to jest spark

spark to darmowy, open-source profiler wydajności dla serwerów Minecraft. Został stworzony przez Lucko, tego samego dewelopera, który stoi za LuckPerms. spark analizuje, co serwer robi w każdym ticku i generuje interaktywne raporty, które pozwalają precyzyjnie zidentyfikować źródło lagów.

Od wersji Paper 1.21 spark jest wbudowany bezpośrednio w serwer - nie trzeba go instalować osobno. Na starszych wersjach lub innych platformach (Spigot, Fabric, Forge, BungeeCord, Velocity) plugin instaluje się tradycyjnie jako plik .jar.

spark jest de facto standardem diagnostycznym w świecie serwerów Minecraft. Gdy zgłaszasz problem z wydajnością na forum Paper czy Discordzie, pierwszą odpowiedzią zawsze jest "wklej link do profilu spark". Plugin jest dostępny na oficjalnej stronie i GitHub.

Profilowanie serwera

spark oferuje dwa główne typy profilowania:

  • Profiler CPU (sampler) - zapisuje, które metody JVM są wywoływane i ile czasu zajmują. Pozwala znaleźć konkretny plugin lub mechanikę gry, która zużywa najwięcej zasobów procesora
  • Profiler pamięci (heap) - analizuje, co zajmuje RAM na serwerze. Przydatny, gdy serwer zużywa coraz więcej pamięci (memory leak) lub gdy GC powoduje lagi

Profilowanie CPU to najczęściej używana funkcja. Uruchamiasz sampler, pozwalasz mu zbierać dane przez 30-60 sekund (lub dłużej przy sporadycznych lagach), a następnie generujesz raport. Wynik to flame graph - interaktywna wizualizacja dostępna w przeglądarce.

Komendy

Komenda Co robi Uprawnienie
/spark profiler start Rozpoczyna profilowanie CPU spark.profiler
/spark profiler stop Kończy profilowanie i generuje raport spark.profiler
/spark profiler start --thread * Profiluje wszystkie wątki (nie tylko main) spark.profiler
/spark health Raport zdrowia serwera (TPS, CPU, RAM) spark.healthreport
/spark tps Aktualny TPS serwera spark.tps
/spark tickmonitor Monitoruje ticki przekraczające próg czasu spark.tickmonitor
/spark heapdump Tworzy zrzut pamięci (heap dump) spark.heapdump
/spark heapsummary Podsumowanie zużycia pamięci spark.heapsummary
/spark gc Statystyki garbage collectora spark.gc

Po zakończeniu profilowania spark generuje link do raportu na spark.lucko.me. Raport jest publiczny i możesz go udostępnić na forum lub Discordzie, aby otrzymać pomoc.

Czytanie flame graphów

Flame graph (graf płomieniowy) to główna wizualizacja spark. Jak ją czytać:

  • Szerokość bloku - im szerszy blok, tym więcej czasu CPU zajmuje dana operacja. Bloki zajmujące ponad 20-30% to potencjalne problemy
  • Stos od dołu do góry - dół to punkt wejścia (main thread), góra to konkretna operacja. Klikaj w bloki, żeby je rozwinąć
  • Kolory - spark koloruje bloki wg źródła: zielony = Minecraft, niebieski = plugin, szary = JVM. Szukaj szerokich niebieskich bloków - to pluginy spowalniające serwer
  • Zakładka "Plugins" - automatycznie grupuje zużycie CPU per plugin, co jest najszybszym sposobem na znalezienie winowajcy

Najczęstszy scenariusz: serwer laguje, uruchamiasz spark na 60 sekund, otwierasz raport i widzisz, że jeden plugin zajmuje 40% czasu CPU. Wiesz dokładnie, co wymienić lub zoptymalizować.

Raport zdrowia serwera

Komenda /spark health generuje szybki przegląd stanu serwera bez uruchamiania pełnego profilera:

  • TPS - aktualny ticks per second (idealnie 20.0). Poniżej 18 oznacza zauważalny lag
  • Tick durations - jak długo trwają poszczególne ticki (powinien być poniżej 50ms)
  • CPU - zużycie procesora przez serwer i system
  • RAM - użyta pamięć, alokacja, zużycie per sekcja
  • Disk I/O - operacje odczytu i zapisu na dysku

To szybki test, który wykonujesz przed głębszą diagnostyką. Jeśli TPS jest w normie, a gracze i tak narzekają na lag, problem może leżeć po stronie sieci (ping), a nie serwera.

Wskazówki diagnostyczne

  • Profiluj pod obciążeniem - uruchamiaj sampler gdy serwer laguje, nie gdy jest pusty. Puste profilowanie nic nie pokaże
  • 30-60 sekund wystarczy - dłuższe profilowanie rzadko daje lepsze wyniki, a plik raportu jest większy
  • Tick monitor - /spark tickmonitor --threshold 100 loguje ticki dłuższe niż 100ms. Przydatne do łapania sporadycznych spike'ów
  • Heap summary przed i po - porównaj /spark heapsummary po restarcie i po kilku godzinach, żeby wykryć memory leaki
  • Porównuj profile - spark pozwala porównać dwa raporty obok siebie, żeby zobaczyć efekt zmian konfiguracji

spark świetnie współpracuje z Plan (długoterminowa analityka) - spark diagnozuje problemy w momencie, Plan śledzi trendy w czasie.