# Czemu mam takie lagi?!?

Jeśli laguje tobie serwer - nie panikuj. Krok po kroku dojdziemy do źródła problemu.

# Wymagania

  • Silnik Paper lub jego forki (Purpur, etc.)
  • Plugin spark (domyślnie wgrany od Paper'a 1.21 oraz każdej wersji Purpur'a) - Służy do mierzenia wydajności serwera i dokładnego namierzania źródła lagów

# Sprawdź TPS'y oraz MSPT

Wpisz /spark tps aby sprawdzić ile serwer ma TPS'ów. Ta komenda powinna dać ci coś takiego:

Omówmy sobie co te wszystkie liczby znaczą:

# TPS - ile ticków serwer wykonał w ciągu sekundy.

Na przedstawionym obrazku na dole widać 5 liczb. Każda z nich to liczba TPS'ów dla odpowiedniego przedziału czasu. Czyli:

  • 5s - średnia liczba TPS'ów w ciągu ostatnich 5 sekund
  • 10s - średnia liczba TPS'ów w ciągu ostatnich 10 sekund
  • 1m - średnia liczba TPS'ów w ciągu ostatniej minuty
  • 5m - średnia liczba TPS'ów w ciągu ostatnich 5 minut
  • 15m - średnia liczba TPS'ów w ciągu ostatnich 15 minut

# MSPT - ile milisekund zajęło serwerowi wykonanie jednego ticka.

Skoro 20 ticków musi wykonać się w 1 sekundę to znaczy że maksymalne MSPT wynosi 1000ms / 20 = 50ms. Inaczej jeśli przekroczy tą wartość to TPS'y będą spadać, czyli serwer będzie lagował.

Często jest to dużo bardziej wiarygodna metryka niż TPS'y, ponieważ dzięki MSPT można przewidzieć kiedy TPS'y zaczną spadać. Jeśli MSPT będzie wynosić 45ms to znaczy że serwer trzyma już się na krawędzi aby TPS'y zaczęły spadać.

# Sprawdź ile mobów jest na serwerze

Możesz to sprawdzić za pomocą:

  • /paper entity list - Pokazuje ile mobów i jakich jest na serwerze.
  • /paper mobcaps - Pokazuje obecny mobcap oraz ile mobów każdej kategorii jest na serwerze
  • /paper playermobcaps - Pokazuje mobcap oraz ile mobów każdej kategorii ale na jednego gracza

Moby są często ogromnym problemem na serwerach. Maksymalna ich ilość która nie powoduje lagów to ~3-5k. Zbyt duża ilość mobów będzie powodować lagi na serwerze przy nieskonfigurowanym mobcapie. Dlatego też są dwa rozwiązania - manualnie dostosowywać mobcapy w configu, co za każdym razem wymaga restartu serwera, lub użycie specjalnego pluginu (patrz sekcje niżej)

# Użycie pluginu OptimizationUtils

Stworzyliśmy specjalny plugin OptimizationUtils - pozwala na automatycznie dostosowywanie mobcapa + kilka innych ciekawych narzędzi. Możesz poczytać więcej informacji o tym pluginie tutaj

  1. Pobierz plugin tutaj i kliknij na OptimizationUtils-x.x.x.jar
  2. Wgraj do folderu plugins
  3. Zrestartuj serwer

Automatyczne dostosowywanie mobcapu jest domyślnie włączone więc samo wgranie pluginu powinno zdecydowanie pomóc z wydajnością.

Dodatkowo możesz ustawiać dynamicznie mobcap albo simulation distance bez restartu serwera:

  • /ou setsimulationdistance <distance> - Ustawia simulation distance
  • /ou setviewdistance <distance> - Ustawia view distance dla wszystkich światów na serwerze
  • /ou setspawnlimit <category> <limit> - Ustawia mobcap

# Sprawdź czy serwerowi nie brakuje RAMu

Najlepiej rozpoznać to wpisując /spark tickmonitor. Jeśli serwerowi brakuje RAMu, zobaczysz częste, powtarzające się wpisy o GC (oczyszczanie pamięci) - dokładnie tak jak poniżej.

# Co możesz zrobić

  1. Zmniejsz view/render distance. Najwygodniej zrobić to pluginem OptimizationUtils, który również pozwala dynamicznie sterować odległością widzenia za pomocą komendy /ou setviewdistance <distance>. Często to chunki zajmują największą ilość RAMu i zmniejszenie ich pomoże zmniejszyć użycie RAMu
  2. Jeśli to nie pomoże i znasz się co nieco na bebechach javowych: wykonaj /spark heapdump i przeanalizuj zrzut pamięci RAM, aby namierzyć potencjalne wycieki.
  3. Ostatecznie rozważ dokupienie RAMu. Optymalnie serwer Minecraft potrzebuje 6–10 GB RAMu (na silniku Paper z poprawnie zrobioną konfiguracją).

# Sprawdź /spark profiler

Jeśli nadal nie wiesz co powoduje lagi i jesteś techniczny, możesz użyć spark profilera.

  • /spark profiler open - Daje linka gdzie odświeżają się dane w czasie rzeczywistym.
  • /spark profiler stop - Generuje link ze spark reportem który możesz udostępnić innym.

Ewentualnie możesz napisać ticketa na discordzie RaidVM i poprosić o pomoc wysyłając link do spark reporta.