Optymalizacja serwera FiveM - więcej FPS i mniej lagów

Serwery FiveM działają z tick rate 64 na sekundę (64 FPS). Każdy tick serwer oblicza pozycje graczy, pojazdów, NPC i logikę wszystkich skryptów. Gdy FPS spada poniżej 30, gracze doświadczają desync: pojazdy teleportują się, strzały nie rejestrują się, a interakcje się zacinają.

Sprawdzanie FPS serwera

W txAdmin widzisz FPS serwera na dashboardzie. Idealna wartość to 64 - wszystko powyżej 50 jest akceptowalne. Poniżej 30 mamy poważny problem.

Najczęstsze przyczyny

1. Zbyt wiele lub źle napisanych skryptów

Przyczyna numer jeden. Każdy zasób wykonuje kod przy każdym ticku. Skrypt, który kosztuje 0,5 ms na tick, brzmi niewinnie, ale przy 100 skryptach to już 50 ms, co ogranicza serwer do 20 FPS.

Rozwiązanie: użyj komendy resmon 1 w konsoli (lub txAdmin). Pokazuje zużycie CPU na zasób. Posortuj według zużycia i zbadaj najcięższe skrypty.

2. Skrypty client-side uruchamiane po stronie serwera

Skrypty przeznaczone dla klienta (UI, HUD, renderowanie NPC) powinny być w client.lua, nie w server.lua. Spawner NPC po stronie klienta, który przypadkowo działa po stronie serwera, oblicza NPC dla każdego połączonego gracza, co przeciąża serwer.

3. Niezoptymalizowane zapytania do bazy danych

Synchroniczne zapytania do bazy danych blokują serwer do czasu otrzymania odpowiedzi. Zawsze używaj asynchronicznych zapytań przez oxmysql. Dodaj indeksy do kolumn, po których wyszukujesz (identifier, citizenid). Zapytanie bez indeksu na tabeli z 10 000 wierszami jest zauważalnie wolne.

4. Zbyt wiele streamowanych zasobów

Niestandardowe pojazdy, ubrania, mapy i propsy muszą być przesyłane do każdego gracza. Setki niestandardowych pojazdów i rozbudowane MLO (wnętrza map) zwiększają czas ładowania i zużycie pamięci.

Rozwiązanie: usuń nieużywane zasoby. Skompresuj tekstury. Rozważ whitelist zasobów.

5. Ustawienia OneSync

OneSync to system sieciowy FiveM. Bez OneSync limit graczy wynosi 32, a wydajność jest gorsza. Upewnij się, że OneSync jest włączony:

set onesync on

Tryb Infinity (wyłączenie set onesync legacy) skaluje się lepiej przy wielu graczach.

Wskazówki optymalizacyjne

  • Usuń skrypty, których nikt nie używa lub które mają nakładającą się funkcjonalność.
  • Używaj Wait() lub Citizen.Wait() w pętlach. Pętla bez wait uruchamia się co tick i marnuje CPU.
  • Cachuj często używane wartości zamiast pobierać je co tick.
  • Używaj eventów i callbacków zamiast pollingu (ciągłego sprawdzania, czy coś się zmieniło).
  • Restartuj serwer codziennie. Serwery FiveM gromadzą pamięć przez wycieki w skryptach.

Ile skryptów to za dużo?

Nie ma stałej liczby. Zależy od jakości. Serwer z 50 dobrze napisanymi skryptami może działać lepiej niż serwer z 20 złymi. Monitoruj za pomocą resmon i skup się na najcięższych zasobach.

Czy więcej RAM pomoże na lagi?

Tylko jeśli lagi są spowodowane brakiem pamięci (serwer swapuje na dysk). W większości przypadków wąskim gardłem jest CPU, nie RAM. Więcej RAM pomaga przy wielu streamowanych zasobach, nie przy wydajności skryptów.

Czy mogę obniżyć tick rate?

Nie. FiveM zawsze działa z 64 tickami na sekundę. Jeśli serwer tego nie osiąga, FPS spada. Rozwiązaniem jest zmniejszenie obciążenia, a nie obniżenie oczekiwań.

Serwery FiveM z gwarantowanym CPU działają na pakietach FiveM HostValues.


Nadal masz pytania? Utworz ticket, a nasz zespol Ci pomoze.

Powrot do bloga