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.
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 100loguje ticki dłuższe niż 100ms. Przydatne do łapania sporadycznych spike'ów - Heap summary przed i po - porównaj
/spark heapsummarypo 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.