Zurück zum Blog

FiveM Server optimieren: Lag und hohe ms beheben

Warum laggt Ihr FiveM Server? Messen mit resmon und profiler, Skripte mit hohen ms-Werten, Datenbankabfragen, große Assets und die Wahl der Hardware.

Nodesty-Team6 Min. LesezeitGameserver
Der Schriftzug FiveM Performance mit resmon, profiler und ms auf dunklem Nodesty-Hintergrund

FiveM Server optimieren heißt, die Skripte, die Last erzeugen, langsame Datenbankabfragen und große Dateien zu finden und zu beheben, damit Ihr Server und das Spiel Ihrer Spieler flüssig bleiben. Auf einem FiveM-Roleplay-Server laufen Hunderte Skripte gleichzeitig; schon einige schlecht geschriebene Skripte senken selbst auf einem leistungsstarken Server die FPS der Spieler und bringen den Server ins Stocken. Die gute Nachricht: Mit den richtigen Werkzeugen finden Sie die Ursache meist in wenigen Minuten.

In dieser Anleitung erklären wir, wie Sie die Last auf Client- und Serverseite messen, Skripte mit hohen ms-Werten beheben, welche Probleme Datenbank und Assets verursachen und wie Sie die passende Hardware wählen. Haben Sie den Server noch nicht eingerichtet, beginnen Sie mit unserer Anleitung FiveM Server erstellen.

Zwei Arten von Last: Client und Server

Die meisten FiveM-Skripte bestehen aus zwei Teilen: dem Client-Code, der auf dem Computer des Spielers läuft, und dem Server-Code, der auf dem Server läuft. Beide verursachen unterschiedliche Probleme:

Art der LastSymptomMesswerkzeug
ClientseitigFPS-Einbrüche bei Spielern, ruckelndes Bildresmon (Spielkonsole)
ServerseitigAlle ruckeln gleichzeitig, Fahrzeuge teleportieren sich, Aktionen verzögern sichprofiler, txAdmin, Hitch-Warnungen
NetzwerkNur einige Spieler teleportieren sichPing des Spielers

Ruckeln nur bestimmte Spieler, prüfen Sie zuerst deren Verbindung; die Ursachen für Verzögerungen erklären wir in unserem Artikel Was ist Ping?.

Die Clientseite messen: resmon

Öffnen Sie im Spiel mit F8 die Konsole und geben Sie ein:

resmon 1

Auf dem Bildschirm erscheinen für jedes Skript die Zeit (ms) und der Speicher, die es auf der Clientseite verbraucht. Darauf sollten Sie achten:

  • Werte im Leerlauf: Solange Sie keine Funktion eines Skripts nutzen, sollte sein Wert sehr nahe bei null liegen. Ein Skript, das dauerhaft über 0,1 ms bleibt, arbeitet in jedem Frame, selbst wenn der Spieler gar nichts tut.
  • Summe: Einzeln klein wirkende Werte können zusammengenommen die FPS des Spielers deutlich senken.
  • Speicher: Ein ständig wachsender Speicherverbrauch kann darauf hindeuten, dass ein Skript Daten anhäuft, die nicht aus dem Speicher entfernt werden.

Die Serverseite messen: profiler und txAdmin

In der Serverkonsole (oder in der Live-Konsole von txAdmin) zeichnen Sie mit dem eingebauten Profiler von FiveM auf, wofür der Server seine Zeit aufwendet:

profiler record 500
profiler view

Der erste Befehl zeichnet die nächsten 500 Ticks auf, der zweite gibt einen Link aus, über den Sie die Aufzeichnung ansehen. Im Ergebnis sehen Sie, welches Skript wie viel Zeit verbraucht. Messen Sie, während der Server voll ist und das Ruckeln auftritt.

Auch txAdmin zeigt den Leistungsverlauf und die Spielerzahl des Servers in Diagrammen an; so erkennen Sie leichter, ob das Ruckeln zu bestimmten Uhrzeiten oder ständig auftritt.

Server thread hitch warning: Sehen Sie diese Warnung in der Serverkonsole, ist der Hauptthread des Servers für die angegebene Dauer hängen geblieben. Gelegentliche kurze Warnungen sind kein Problem; häufige und lange Warnungen deuten auf eine langsame Abfrage, ein schweres Skript oder einen Prozessor hin, der nicht hinterherkommt.

Skripte mit hohen ms-Werten beheben

Die meisten Performance-Probleme in FiveM gehen auf einige wenige Muster zurück:

  • Endlosschleifen mit Wait(0): Eine Schleife, die in jedem Frame läuft, ist nur für Aufgaben nötig, die wirklich in jedem Frame erledigt werden müssen (etwa Zeichnen auf dem Bildschirm oder Tastenabfragen). Für alles andere erhöhen Sie die Wartezeit und lassen die Schleife gar nicht laufen, wenn sie nicht gebraucht wird:
    CreateThread(function()
        while true do
            local sleep = 1000
            local coords = GetEntityCoords(PlayerPedId())
            if #(coords - zielKoordinaten) < 10.0 then
                sleep = 0
                -- Aufgaben in der Nähe
            end
            Wait(sleep)
        end
    end)
    

    Ist der Spieler weit vom Ziel entfernt, läuft die Schleife einmal pro Sekunde; erst wenn er in die Nähe kommt, läuft sie in jedem Frame.
  • Events statt Schleifen: Statt ständig zu prüfen, ob sich etwas geändert hat, nutzen Sie Events und State Bags.
  • Unnötige Native-Aufrufe: Speichern Sie das Ergebnis teurer Aufrufe, die sich in jedem Frame wiederholen, in einer Variablen.
  • Alte und nicht gepflegte Skripte: Oft gibt es eine aktuellere und optimierte Alternative, die dieselbe Aufgabe erledigt.
  • Ungenutzte Skripte: Jedes Skript, das in der server.cfg gestartet, aber nicht genutzt wird, erzeugt Last; entfernen Sie es.

Erstellen Sie vor jeder Änderung an einem Skript ein Backup und testen Sie die Änderung nach Möglichkeit auf einem Testserver.

Datenbankabfragen

Auf ESX- und QBCore-Servern liegen Spielerdaten, Inventare und Fahrzeuge in der Datenbank. Eine langsame Abfrage bringt den Server ins Stocken. oxmysql kann Abfragen, die länger als eine bestimmte Zeit dauern, in der Konsole ausgeben; fügen Sie dazu in der server.cfg hinzu:

set mysql_slow_query_warning 150

Wenn Sie in der Konsole Warnungen zu langsamen Abfragen sehen:

  • Legen Sie Indizes an. Fehlende Indizes auf häufig abgefragten Spalten (etwa der Spieler-ID) sind die häufigste Ursache.
  • Führen Sie keine Abfragen in Schleifen aus. Nutzen Sie Sammelabfragen statt einer eigenen Abfrage für jeden Spieler oder jeden Gegenstand.
  • Halten Sie die Datenbank auf derselben Maschine. So werden Abfragen ohne Netzwerklatenz beantwortet.

Die Performance-Einstellungen von MariaDB erklären wir in unserer Anleitung MySQL und MariaDB installieren.

Große Fahrzeug- und Kartendateien

Eigene Fahrzeuge, MLOs (Innenräume) und Kleidung werden zu den Spielern heruntergeladen und in den Speicher des Spiels geladen. Sehr große Texturdateien haben zwei Folgen:

  • Der erste Beitritt der Spieler zum Server dauert länger.
  • Sie füllen den Speicher des Spiels, sodass Texturen verspätet laden und das Spiel ruckelt.

FiveM gibt bei übergroßen Assets eine Warnung in der Serverkonsole aus. Nehmen Sie diese Warnungen ernst: Verkleinern Sie die Dateien, indem Sie Texturen komprimieren oder ihre Auflösung senken, und entfernen Sie ungenutzte Fahrzeug- und Kartenpakete.

Servereinstellungen und Wartung

  • Halten Sie das Artifact aktuell. Neue Serverversionen enthalten Performance-Verbesserungen. Erstellen Sie vor dem Update ein Backup.
  • Starten Sie regelmäßig neu. Nutzen Sie die geplanten Neustarts von txAdmin, um den Server zu den Zeiten neu zu starten, in denen die wenigsten Spieler online sind.
  • Halten Sie das Spielerlimit realistisch. Legen Sie den Wert sv_maxclients nach der Zahl fest, die Ihr Server und Ihre Skripte verkraften.
  • Überwachen Sie die Ressourcen. Wie Sie CPU- und Speichernutzung im Blick behalten, erklären wir in unserer Anleitung Server Monitoring.

Hardware: Single-Core-Leistung

Der Hauptthread eines FiveM-Servers läuft größtenteils auf einem einzigen Kern. Deshalb zählt die Single-Core-Leistung mehr als die Zahl der Kerne. Ruckelt der Server auch nach der Optimierung Ihrer Skripte in vollen Momenten, ist der Wechsel auf einen Prozessor mit höherem Takt die wirksamste Lösung. Auch Angriffe sind eine häufige Ursache für plötzliches Ruckeln auf FiveM-Servern; werfen Sie einen Blick auf unseren Artikel Was ist ein DDoS-Angriff?.

Nodesty für Ihren FiveM Server

Die Nodesty-Pakete zum FiveM Server mieten laufen in Frankfurt mit einem Ryzen 9 9950X mit bis zu 5,7 GHz für den Hauptthread von FiveM, der auf einem einzelnen Kern läuft, mit NVMe-Speicher für Datenbank und Assets und mit L3–L7-DDoS-Schutz. Windows und Linux werden ohne Aufpreis installiert, es gibt keine Slot-Gebühren, und tägliche Backups werden 7 Tage aufbewahrt. Wächst Ihre Spielerzahl, wechseln Sie im Panel auf ein größeres Paket.

FiveM ist eine Marke von Cfx.re, Grand Theft Auto V eine Marke von Rockstar Games. Nodesty ist mit diesen Unternehmen nicht verbunden und wird nicht von ihnen unterstützt.

Häufig gestellte Fragen

Wie viele ms sollte ein Skript verbrauchen?

Im Leerlauf, also solange der Spieler keine Funktion des Skripts nutzt, liegt die Nutzung eines gut geschriebenen Skripts sehr nahe bei null. Kurze Spitzen, während ein Menü geöffnet ist oder eine Aktion läuft, sind normal. Skripte, die dauerhaft über 0,1 ms bleiben, sollten Sie genauer untersuchen; die Gesamtlast entsteht weniger durch ein einzelnes Skript als durch die Summe vieler kleiner Skripte.

Zeigen die Werte in resmon den Server an?

Nein. Das resmon, das Sie in der Spielkonsole öffnen, zeigt die Nutzung der Skripte auf Ihrem eigenen Computer (clientseitig). Hohe Client-ms führen bei Spielern zu FPS-Einbrüchen. Um die serverseitige Nutzung zu messen, verwenden Sie den Profiler in der Serverkonsole und die Performance-Ansichten von txAdmin.

Was bedeutet Server thread hitch warning?

Die Warnung zeigt, dass der Hauptthread des Servers kurz hängen geblieben ist, also eine Aufgabe länger gedauert hat als erwartet. Gelegentliche kurze Warnungen sind kein Problem; häufige und lange Warnungen deuten auf langsame Datenbankabfragen, ein schweres Skript oder einen Prozessor hin, der nicht hinterherkommt.

Behebt mehr RAM den Lag?

Meist nicht. Die meisten Ruckler auf FiveM-Servern entstehen durch schwere Skripte, langsame Datenbankabfragen und einen Prozessor, der auf einem einzelnen Kern nicht hinterherkommt. RAM wird nur dann zum Problem, wenn er tatsächlich ausgeht; das prüfen Sie in txAdmin oder in den Ressourcenanzeigen des Servers.

Einige Spieler ruckeln ständig, andere gar nicht. Warum?

Das liegt meist nicht am Server, sondern am Computer oder an der Verbindung des Spielers. Skripte mit hohen Client-ms, sehr große Fahrzeug- und Kartendateien oder ein hoher Ping des Spielers führen bei einzelnen Spielern zu Rucklern. Ruckeln alle Spieler gleichzeitig, liegt das Problem sehr wahrscheinlich beim Server.

Sollte ich das Server-Artifact aktualisieren?

Ja, regelmäßig. Neue Artifact-Versionen enthalten Performance-Verbesserungen und Fehlerbehebungen. Erstellen Sie vor dem Update ein Backup Ihres Servers und Ihrer Datenbank und testen Sie die neue Version nach Möglichkeit zuerst auf einem Testserver.

Nodesty

Über den Autor

Nodesty-Team · Infrastruktur und Support

Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.

Verwandte Artikel

Starte deinen Server jetzt.

Erstellen, wachsen und skalieren Sie Ihre Projekte grenzenlos auf der Premium-Infrastruktur von Nodesty.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································