Komunikat „server thread hitch warning" w konsoli FiveM oznacza, że skrypt zablokował główny wątek na dłużej niż 150 ms. Gracze odczuwają to jako lag, zacięcia teleportacji, zawieszające się pojazdy lub NPC, które przestają reagować. Problem prawie zawsze tkwi w zasobie (resource), nie w sprzęcie.
Co się technicznie dzieje
Serwer FiveM wykonuje wszystko na jednym wątku. Każdy tick musi zakończyć się w ciągu 16 ms, aby utrzymać 60 ticków na sekundę. Jeśli skrypt potrzebuje 150 ms lub więcej na jedną operację, FiveM wyświetla hitch warning. Serwer jest wtedy opóźniony i musi nadrobić zaległości, co gracze odczuwają jako krótkie zawieszenie.
Krok 1: znajdź przyczynę za pomocą resmon
Połącz się z serwerem i otwórz konsolę F8. Wpisz resmon 1. Pojawi się nakładka pokazująca zużycie CPU i pamięci dla każdego zasobu. Każdy zasób powyżej 0,25 ms warto sprawdzić. Powyżej 1 ms jest podejrzany. Powyżej 5 ms to niemal na pewno przyczyna Twoich hitch warningów.
Krok 2: profiler po stronie serwera
Resmon pokazuje obraz po stronie klienta. Do problemów po stronie serwera używasz wbudowanego profilera:
- Wpisz w konsoli serwera:
profiler record 500 - Poczekaj, aż nagranie się zakończy.
- Wpisz:
profiler save mojprofil - Wpisz:
profiler view mojprofil
Pojawi się link, który otwierasz w przeglądarce. Profil pokazuje dla każdego zasobu i każdej funkcji, ile czasu zużyła. Przybliż się do pików: to Twoi sprawcy hitchy.
Krok 3: najczęstsze przyczyny
- Zapytania do bazy danych bez indeksu. Zapytanie typu
SELECT * FROM users WHERE identifier = 'steam:xxx'na tabeli bez indeksu naidentifiermoże trwać dziesiątki milisekund przy każdym wywołaniu. Dodaj odpowiednie indeksy w bazie danych. - Synchroniczne pętle w Lua lub JavaScript.
while true dobezWait()blokuje wątek na stałe. Każda pętla w kodzie po stronie serwera musi mieć czas oczekiwania. - Zbyt wiele exportów na tick. Exporty wywoływane co tick zamiast cachowanych lub opartych na eventach szybko się kumulują.
- Niezoptymalizowane pliki YTD pojazdów. Niestandardowe pojazdy z teksturami 4096px, podczas gdy FiveM wewnętrznie ogranicza je do 1024px. Serwer musi streamować tekstury do każdego klienta.
- Zbyt wiele zasobów ładowanych jednocześnie. Sto zasobów to norma na serwerze RP, ale każdy skrypt, który przy uruchamianiu pobiera dane z bazy, powoduje skok obciążenia.
Krok 4: rozwiązanie
- Usuń lub wyłącz najcięższy zasób i sprawdź, czy hitche ustały.
- Zastąp źle napisane darmowe skrypty zoptymalizowanymi alternatywami. Płatne skrypty od znanych deweloperów są często lepiej zoptymalizowane.
- Dodaj indeksy do bazy danych. Najczęstszy:
ALTER TABLE users ADD INDEX (identifier); - Batchuj zapytania do bazy danych zamiast wykonywać je na gracza na sekundę.
- Ustaw automatyczny restart przez txAdmin (co 6 do 12 godzin), aby ograniczyć wycieki pamięci.
Czy hitch warningi są szkodliwe dla serwera?
Nie powodują trwałych uszkodzeń, ale pogarszają wrażenia z gry. Przy powtarzających się hitchach gracze tracą połączenie lub się zawieszają.
Czy więcej RAM rozwiąże problem?
Zwykle nie. Hitch warningi to problem procesora (wątek jest zablokowany), nie pamięci. Więcej RAM pomoże tylko wtedy, gdy serwer aktywnie korzysta ze swap.
Jak zapobiec hitchom przy uruchamianiu?
Hitch warningi przy uruchamianiu są normalne: wszystkie zasoby ładują swoje dane jednocześnie. To hitche podczas gry wymagają rozwiązania.
Pakiety FiveM HostValues działają na procesorach Ryzen 9 z wysokim taktowaniem single-core, co bezpośrednio wpływa na czas ticku. Przy pytaniach dotyczących wydajności nasz zespół wsparcia pomoże z analizą wyników profilera.