server thread hitch warning: timer interval of X milliseconds, napraw

Widzisz 'server thread hitch warning: timer interval of X milliseconds'? Co to oznacza, co to powoduje, jak znaleźć winowajcę za pomocą profilera i kiedy to ignorować.

W konsoli serwera lub w txAdmin:

text
server thread hitch warning: timer interval of 1250 milliseconds

Serwer zwykle tyka wiele razy na sekundę. Ta linia mówi, że jedna przerwa między taktem była znacznie dłuższa niż powinna być, tutaj 1250 ms. Ten przewodnik obejmuje co to oznacza, zwykłe przyczyny, jak znaleźć skrypt za tym za pomocą profilera i kiedy możesz to ignorować.

Co to oznacza

Serwer uruchamia Twoje zasoby w jednym głównym wątku i obserwuje, jak długo to trwa, aby wrócić. Gdy coś utrzymuje ten wątek zajęty, następny takt jest spóźniony i serwer drukuje to ostrzeżenie z długością opóźnienia.

Gracze zauważają hitch jako lag: działania, które na chwilę odpowiadają, pojazdy, które skaczą do tyłu i zdarzenia, które przybywają spóźnione. Jedna liczba sama mówi mało. Patrz, jak często się pojawia i jak się powiększa.

Powszechne przyczyny

  • Ciężki skrypt serwera. Pętla, która przechodzi przez wszystkich graczy, wszystkie pojazdy lub dużą tabelę, uruchamiającą się kilka razy, utrzymuje wątek zajęty. while true do pętla z Wait(0) na serwerze to typowy sprawca.
  • Wolna praca bazy danych. Zasób, który prosi bazę danych o wiele danych lub uruchamia bardzo wolne zapytanie, utrzymuje wątek czekając lub przetwarzając duży rezultat. Sprawdź powolne ostrzeżenia o zapytaniach, które drukuje oxmysql, i upewnij się, że kolumny, które wyszukujesz, mają indeks.
  • Zbyt wiele jednostek. Tysiące pojazdów, pedów lub obiektów, które skrypt tworzy i nigdy nie usuwa, obciąża serwer, szczególnie z OneSync.
  • Wolna maszyna. Zajęty CPU, VPS, który dzieli swoje rdzenie z innymi, powolny lub pełny dysk lub antywirus skanujący folder serwera, dodają opóźnienie, które nie ma skrypt.
  • Bardzo duża liczba zdarzeń. Skrypt, który wypalenia zdarzenie dla każdego gracza wiele razy na sekundę kosztuje czas po obu stronach.
  • Sama konsola. Na Windows, kliknięcie wewnątrz okna konsoli serwera może wstrzymać proces, gdy okno wchodzi w tryb wyboru tekstu. Jeśli Twoje ostrzeżenia o hitchach pojawiają się jako jedna długa przerwa i potem się zatrzymują, sprawdź, czy nie kliknąłeś w niej. Naciśnij Enter lub Escape w oknie, aby je zwolnić.

Wskazówka: porównaj czas ostrzeżenia z tym, co robiłeś. Hitch za każdym razem, gdy ktoś otwiera określone menu, lub o tej samej minucie każdej godziny, wskazuje na zasób stojący za tym działaniem lub zaplanowane zadanie.

Znajdź winowajcę za pomocą profilera

FiveM ma wbudowany profiler. Używasz go w konsoli serwera (Live Console w txAdmin, lub Twój terminal). Zacznij nagrywać kilka ramek, gdy problem się dzieje:

text
profiler record 500

Kiedy nagrywanie jest gotowe, sprawdź je i otwórz:

text
profiler status
profiler view

Przeglądarka pokazuje, które zasoby i które funkcje zajęły czas. Szukaj zasobu, którego słupek jest znacznie dłuższy niż pozostałe, a następnie otwórz jego funkcje, aby zobaczyć, która spędza czas. Sprawdź dokumentację FiveM dla dokładnych poleceń i opcji Twojej wersji artefaktu, ponieważ profiler ma więcej opcji niż wymienione tutaj, takie jak zapisywanie nagrania do pliku.

Jeśli nie złapiesz problemu w czynie, nagraj ponownie, gdy to się dzieje, lub gdy masz wiele graczy online. Nagranie, podczas gdy serwer jest pusty, zwykle nie pokazuje niczego użytecznego.

Drugi sposób: zatrzymaj zasoby jeden po drugim

Kiedy nie chcesz czytać danych profilera, znajdź winowajcę poprzez eliminację. W konsoli serwera:

text
stop my_script

Czekaj kilka minut i sprawdź, czy ostrzeżenia się zatrzymują. Uruchom go ponownie z ensure my_script. Zacznij od zasobów, które dużo się pętlą (prace, HUDs, wszystko z „sync" lub „tick" w nazwie) i najnowsze dodane.

Napraw przyczynę

  • Ciężkie pętle: spraw, aby pętle serwera czekały dłużej. Prawie nic nie potrzebuje Wait(0) na serwerze. Wait(1000) lub więcej jest często wystarczające.
lua
CreateThread(function()
    while true do
        Wait(5000)
        -- check things every 5 seconds, not every tick
    end
end)
  • Baza danych: używaj wywołań await tylko tam, gdzie potrzebujesz rezultatu, unikaj zapytań wewnątrz pętli i napisz jedno zapytanie, które zwraca wiele wierszy zamiast wielu zapytań, które zwracają jeden. Dodaj indeks do kolumny, którą wyszukujesz w dużej tabeli.
  • Jednostki: usuń pojazdy i obiekty, które skrypt tworzy, gdy już ich nie potrzebuje i ustaw limit, ile może utworzyć.
  • Sprzęt: jeśli serwer ma kilka zasobów z małymi hitchami i nic się nie wyróżnia, patrz na użycie CPU, miejsca na dysku i czy inne programy działają na tej samej maszynie.
  • Aktualizacja: stare artefakty serwera otrzymują poprawki wydajności. Zobacz update FiveM server artifacts.

Kiedy to ignorować

Ostrzeżenia podczas startu są oczekiwane. Podczas gdy serwer ładuje dziesiątki zasobów, czyta ich pliki i łączy się z bazą danych, wątek jest przez chwilę zajęty i garstka ostrzeżeń o hitchach w pierwszej minucie nic nie oznacza, że coś jest nie tak.

Również ignoruj rzadkie, małe liczby (kilkaset milisekund), które pojawiają się co jakiś czas, na przykład podczas restartu dużego zasobu. Działaj, gdy ostrzeżenia pojawiają się podczas gdy gracze są online, powtarzaj lub osiągaj sekundy.

Lista kontrolna

Objaw Rozwiązanie
Ostrzeżenia tylko w pierwszej minucie Normalne: zasoby się ładują
Jedno duże ostrzeżenie, potem nic Sprawdź, czy nie kliknąłeś w oknie konsoli (Windows)
Powtarzające się ostrzeżenia z graczami online Nagraj za pomocą profiler record 500 i czytaj za pomocą profiler view
Jeden zasób się wyróżnia Napraw jego pętle serwera lub zatrzymaj go i poproś jego autora
Ostrzeżenia po akcji ciężkiej do zapytania Dodaj indeks i zmniejsz liczbę zapytań
Wiele jednostek Usuń spawne pojazdy i obiekty, gdy gotowe
Żaden skrypt się nie wyróżnia Sprawdź CPU, dysk i antywirus na maszynie oraz zaktualizuj artefakty

Szybkie odpowiedzi

Co oznacza 'server thread hitch warning'?

Główny wątek serwera nie wrócił do pracy na czas. Raportuje, ile milisekund trwała przerwa i podczas tego czasu gracze mogą czuć lag lub gumowanie.

Czy ostrzeżenie przy starcie serwera jest problemem?

Zwykle nie. Podczas gdy wiele zasobów ładuje się przy starcie serwer jest zajęty i kilka ostrzeżeń w pierwszej minucie jest normalne. Martw się ostrzeżeniami, które pojawiają się, gdy gracze są online.

Jak duża liczba to problem?

Kilkaset milisekund co pewien czas to drobne. Sekundy lub stały strumień ostrzeżeń oznacza, że coś blokuje serwer i powinieneś to znaleźć.

Skrypty bez tego problemu

Crypto MiningKup magazyn, składaj koparki część po części i kop monety na żywym rynku.Zobacz skrypt →CCTV Security CamerasKamery do rozstawienia, tablet z podglądem wielu kamer na żywo i drukowane zdjęcia jako dowody.Zobacz skrypt →Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →

Czytaj dalej