TPS, MSPT i lagi w Minecraft: co znaczą te liczby
TPS to skrót od ticków na sekundę i jest tętnem twojego serwera Minecraft: przy 20 TPS serwer przelicza świat dwadzieścia razy na sekundę, a wyżej niż 20 wejść się nie da. MSPT to liczba milisekund, jakie zajmuje pojedynczy tick; poniżej 50 ms jest zdrowo, bo 20 ticków po 50 ms mieści się dokładnie w jednej sekundzie. Jeśli TPS spada poniżej 20, to nie jest przyczyna, tylko skutek: MSPT przekroczyło już wtedy 50 ms. Dlatego sterujesz MSPT, a nie TPS.
Czym jest tick i dlaczego granicą jest 50 ms?
Tick to pełna runda obliczeń nad światem serwera. W tej rundzie rusza się każdy mob, przeliczana jest redstone, rosną uprawy, spadają przedmioty, chunki są wczytywane i zwalniane, a każdy plugin i mod odpala swój własny kod. Dopiero gdy cała ta praca się skończy, zaczyna się kolejny tick.
Serwer planuje dwadzieścia takich rund na sekundę. Sekunda ma 1000 milisekund, więc każdy tick dostaje budżet 50 ms. Jeśli tick skończy się wcześniej, serwer czeka do końca tego budżetu. Jeśli trwa dłużej, następny tick startuje z opóźnieniem i świat zaczyna gonić zegar. To gonienie gracze odczuwają jako lagi: bloki wracają na miejsce po tym, jak je rozbijesz, moby ruszają się jak w zwolnionym tempie, a skrzynka otwiera się dopiero sekundę później.
Wszystko poniżej 50 ms oznacza, że serwer wyrabia się na czas, ale między 12 ms a 45 ms jest ogromna różnica, mimo że w obu przypadkach licznik pokazuje równe 20,0 TPS. Przy 12 ms masz ponad trzy razy więcej zapasu, niż potrzebujesz. Przy 45 ms wystarczy zapychająca się farma mobów albo zadanie kopii zapasowej, żeby przekroczyć granicę. Patrz też dalej niż na samą średnią: 20 ms ze skokami do 120 ms odczuwa się gorzej niż równe 35 ms bez wyskoków. Dlatego spark pokazuje percentyle, a 95. percentyl mówi ci, jak złe są twoje najgorsze ticki.
Dlaczego MSPT ostrzega wcześniej niż TPS?
Bo TPS ma sufit, a MSPT nie. Dwadzieścia to maksimum, więc TPS może iść tylko w dół i robi to dopiero wtedy, gdy serwer naprawdę przestaje wyrabiać z tickami. Serwer, który przez tygodnie pełznie z 15 ms na 30 ms, a potem na 48 ms MSPT, przez cały ten czas grzecznie melduje 20,0 TPS. Pierwszą stratę TPS zobaczysz dopiero przy 51 ms.
TPS to więc lampka tak/nie, a MSPT to wskaźnik paliwa. Kto reaguje dopiero wtedy, gdy TPS spada, ten wrastał w problem przez tygodnie i nic z tego nie widział. Zapisuj MSPT co tydzień, a zobaczysz trend, zanim cię dogoni.
Czym różnią się TPS, FPS i ping?
Trzy liczby i trzy miejsca, w których coś może pójść nie tak. Gracze na wszystkie trzy mówią „lagi”, a rozwiązanie za każdym razem jest inne.
- TPS i MSPT działają po stronie serwera i mówią, jak szybko procesor przerabia pracę nad światem. Na to jako właściciel masz realny wpływ.
- FPS to klatki na sekundę na komputerze samego gracza: karta graficzna, shadery, resource packi i render distance w kliencie. Serwer nie ma na to żadnego wpływu.
- Ping to sieć pomiędzy nimi: czas podróży pakietu tam i z powrotem. O tej liczbie decyduje odległość od centrum danych, wi-fi i utrata pakietów.
Przydatny punkt odniesienia: skoro tick trwa 50 ms, ping wyraźnie poniżej tej wartości ginie w szumie. Gdy ping urośnie do wielokrotności tej liczby, kliknięcia i ruch zaczną widocznie się opóźniać, nawet przy idealnych 20 TPS. Jedynym prawdziwym narzędziem jest tu lokalizacja serwera; my mamy własny sprzęt w Hengelo, Frankfurcie, Warszawie i Ameryce Północnej.
Jak poznać, który z tych trzech to twój problem?
Zacznij od objawu, a nie od liczby, którą akurat masz otwartą.
| Objaw | Prawdopodobna przyczyna | Pierwsza kontrola |
|---|---|---|
| Rozbijasz bloki, a one wracają, skrzynki reagują z opóźnieniem | Serwer nie wyrabia z tickami, MSPT powyżej 50 | /tps albo /spark tps, spójrz na MSPT |
| Obraz się tnie, ale czat i bloki reagują natychmiast | FPS na komputerze gracza | F3 w kliencie, sprawdź fps i render distance |
| Biegniesz płynnie, ale ciągle cię cofa | Wysoki ping albo utrata pakietów | Ping na liście serwerów, przetestuj po kablu zamiast wi-fi |
| Wolno tylko w godzinach największego ruchu | Za mało zapasu CPU w szczycie | Profiler spark puszczony w trakcie szczytu, a nie po nim |
| Po kilku godzinach wolno, po restarcie znowu dobrze | Narastanie entities albo presja pamięci z pauzami GC | Liczba entities na chunk i zużycie RAM przed restartem |
| Krótka czkawka na pół sekundy, co kilka minut | Zapis świata albo zadanie kopii zapasowej | Zestaw skoki MSPT z interwałem zapisu i godzinami kopii |
Co najczęściej powoduje niskie TPS?
W praktyce prawie zawsze chodzi o cztery obszary. Entities są na czele: zapychające się farmy mobów, setki luźnych przedmiotów na ziemi, porzucone łódki i wagoniki. Każda entity kosztuje czas obliczeń w każdym ticku, w którym jest wczytana. Redstone i automatyzacja idą zaraz za nimi, zwłaszcza zegary tykające bez przerwy. Wczytywanie chunków to trzeci obszar: zbyt wysokie view-distance albo simulation distance mnoży pracę przypadającą na gracza, a kto eksploruje nowy teren, zmusza serwer do generowania świata, podczas gdy zegar leci dalej. Ciężkie pluginy albo mody zamykają stawkę.
Za mało pamięci to osobna kategoria. Jeśli JVM stale dostaje za mało RAM, garbage collector uruchamia się częściej i na dłużej, a ty widzisz to jako skoki MSPT bez wyraźnego winowajcy. Przy ciężkich modpackach dzieje się to szybko: All the Mods 10 na NeoForge i Minecraft 1.21.1 wymaga minimum 10 GB, około 12 GB dla małej ekipy oraz 14 do 16 GB przy pięciu lub więcej graczach. Jeśli na twoim serwerze chodzi taki modpack, sprawdź też, czy masz Java 21, bo na Java 17 All the Mods 10 w ogóle nie wystartuje. FerriteCore oszczędza jakieś 30 do 40 procent pamięci; Canary i ModernFix to typowe uzupełnienia. Ustawienia pod każdą z tych przyczyn rozpisaliśmy w artykule o optymalizacji serwera Minecraft i zmniejszaniu lagów.
Jak zmierzyć to za pomocą spark?
spark to standardowe narzędzie do profilowania wydajności i działa na Paper, Purpur, Fabric, Forge oraz NeoForge, więc zmiana oprogramowania serwera nie jest potrzebna. Nie bez powodu trafia do każdego poważnego zestawienia niezbędnych pluginów do Minecraft.
- Zainstaluj spark jako plugin albo mod i zrestartuj serwer w całości.
- Wpisz
/spark tps, żeby zobaczyć TPS i MSPT z percentylami, i zanotuj wartości z chwili, gdy jest spokojnie. Bez pomiaru odniesienia później nie poznasz, co odstaje. - Odpal
/spark profiler startdokładnie wtedy, gdy skargi faktycznie się pojawiają. Profil spokojnego serwera nic ci nie powie. - Pozwól profilerowi pochodzić kilka minut i zakończ przez
/spark profiler stop. Dostaniesz link do raportu w przeglądarce. - Czytaj ten raport z góry na dół i idź za najgrubszą gałęzią. Tam zobaczysz, co zjada największą część ticka.
Korzystaj przy tym również z /spark health dla pamięci i miejsca na dysku. Jeśli widzisz przede wszystkim długie pauzy garbage collectora, twoim tropem jest pamięć albo konfiguracja Java.
Kiedy większy pakiet nic nie da?
Bądźmy szczerzy: więcej RAM nie naprawi niskiego TPS, jeśli serwerowi wcale nie brakuje pamięci. Pętla ticków w Minecraft mocno opiera się na pojedynczym rdzeniu procesora, więc liczy się to, jak szybki jest ten rdzeń. Jeśli twoje MSPT jest wysokie przez zegar z redstone albo farmę mobów, na większym pakiecie będzie kosztować dokładnie tyle samo. Najpierw posprzątaj, zmierz ponownie, a dopiero potem skaluj.
Sprzęt robi realną różnicę tam, gdzie masz wolny dysk i słabe rdzenie. SSD skraca czas wczytywania All the Mods 10 z ponad dziesięciu minut na HDD do dwóch, trzech minut. Nasza linia budżetowa działa na AMD EPYC 7443P, a linia premium na AMD Ryzen 9 9950X, obie z dyskiem NVMe-SSD; ile to kosztuje, sprawdzisz w ofercie hostingu Minecraft w MC-Node. Jeśli problem leży po stronie FPS albo pingu, większym pakietem nie kupisz sobie nic.
Najczęściej zadawane pytania
Jaka wartość TPS jest dobra? 20 to maksimum i zarazem jedyna wartość, która oznacza, że serwer trzyma się harmonogramu. Wszystko poniżej znaczy, że ticki są gubione, a świat goni zegar. Zawsze patrz przy tym na MSPT: 20 TPS przy 12 ms jest zdrowe, a 20 TPS przy 45 ms ociera się o granicę 50 ms.
Czy TPS może przekroczyć 20? Nie. Serwer planuje dokładnie 20 ticków na sekundę i czeka, jeśli tick skończy się wcześniej, więc 20 to twardy sufit. Po skoku lagów serwer może nadrobić ticki, ale licznik i tak nie wyjdzie powyżej 20.
Mam niski FPS, a serwer trzyma 20 TPS, co teraz? Wtedy problem leży po stronie twojego komputera albo ustawień klienta, a nie serwera. Zmniejsz render distance, wyłącz shadery i rozważ nastawiony na wydajność modpack kliencki, na przykład Fabulously Optimized, który działa na Fabric z Sodium i Lithium oraz ma ponad 12 milionów pobrań na Modrinth.
Czy więcej RAM pomoże na niskie TPS? Tylko wtedy, gdy naprawdę miałeś go za mało. Przy ciężkim modpacku takim jak All the Mods 10 to realny scenariusz, bo wymaga on minimum 10 GB, a przy pięciu lub więcej graczach 14 do 16 GB. Na serwerze Paper z wystarczającą pamięcią niskiego TPS nie naprawisz gigabajtami, tylko mniejszą liczbą entities i szybszymi rdzeniami procesora.
Dlaczego mam lagi, mimo że ping jest niski? Ping mierzy tylko czas podróży twoich pakietów przez sieć, a nie to, jak szybko serwer przelicza świat. Jeśli MSPT jest powyżej 50 ms, twoje pakiety docierają błyskawicznie do serwera, który odpowiada za późno. Wpisz /spark tps, żeby wykluczyć to w kilka sekund.