FiveM-Server-Performance optimieren: der komplette Guide für 2026
Wenn dein FiveM-Server unter Lag oder hohem Server-Timing leidet, liegt die Ursache meist in einer Mischung aus Hardware-Grenzen, unoptimierten Scripts und langsamen Datenbankabfragen. Dieser Guide geht jeden Bereich durch, damit du den Server selbst bei voller Slot-Auslastung und schweren Roleplay-Scripts stabil hältst.
Er behandelt Hardware, die wichtigsten server.cfg-Einstellungen, Script-Tuning und Datenbankarbeit, mit realistischen Zielwerten am Ende.
Warum Optimierung wichtig ist
Spielerbindung
Performance hat einen direkten Einfluss darauf, ob Spieler bleiben:
- Spieler verlassen Server, die durchgehend laggen
- Schlechte Performance führt zu negativen Bewertungen in Serverlisten
- Ein gut abgestimmter Server trägt auf derselben Hardware mehr Spieler
Das Ziel: die Server-Tick-Time bei Spitzenlast niedrig und stabil halten.
1. Hardware (Basis für 2026)
Minimum für rund 32 Spieler
CPU: Intel i5-11400 / AMD Ryzen 5 5600X
(6 Kerne, 12 Threads, 3.5+ GHz Basistakt)
RAM: 16GB DDR4 3200MHz
Speicher: 250GB NVMe SSD Gen 3
Netzwerk: 100 Mbps symmetrisch (Upload = Download)
OS: Ubuntu 22.04 LTS / Windows Server 2022
Empfohlen für höhere Spielerzahlen
CPU: AMD Ryzen 7 7800X3D / Intel i7-13700K
(Single-Thread-optimiert, 4.5+ GHz Boost)
RAM: 64GB DDR5 6000 CL30
Speicher: 1TB NVMe Gen 4 SSD
Netzwerk: 1 Gbps dedizierte Anbindung
OS: Ubuntu 22.04 LTS
Warum diese Spezifikationen
CPU - Single-Thread-Leistung zuerst:
- FiveM ist weitgehend Single-Threaded
- Taktrate zählt mehr als die Kernanzahl
- AMDs X3D-Cache und aktuelle Intel-Modelle schneiden hier beide gut ab
RAM - Swapping vermeiden:
- Schwere Script-Lasten beanspruchen eine große Grundmenge an Arbeitsspeicher
- Map-Streaming kommt noch hinzu
- Schnellerer Arbeitsspeicher bringt einen kleinen, aber realen Vorteil
Speicher - schnelle SSDs verkürzen Ladezeiten:
- NVMe-Laufwerke verkürzen Map-Streaming und Verbindungszeiten
- Datenbankabfragen profitieren von geringer Latenz
- Neustarts laufen schneller durch
2. server.cfg-Einstellungen
Deine server.cfg steuert das Kernverhalten. Ein sinnvoller Ausgangspunkt:
# ==================================== # WICHTIGE PERFORMANCE-EINSTELLUNGEN # ==================================== # OneSync - erforderlich ab 32 Slots onesync on # Spieler-Slots (an deine Hardware anpassen) sv_maxclients 64 # Netzwerkbandbreite pro Client sv_maxrate 65000 sv_minrate 25000 # Verbindungsqualität sv_packetLoss 0.05 sv_timeout 60 # Datenbank set mysql_connection_string "mysql://user:password@localhost/database?charset=utf8mb4&maxConnections=10" set mysql_slow_query_warning 100
Wichtige Einstellungen
onesync on:
- Aktiviert die Unterstützung für mehr als 32 Spieler
- Verbessert die Entity-Synchronisation
- Von modernen Frameworks vorausgesetzt
sv_maxrate:
- Steuert die Bandbreite pro Spieler
- Zu niedrig schadet der Sync-Qualität, zu hoch verschwendet Bandbreite
- Ein Wert im Bereich von 50.000 bis 70.000 passt für die meisten Server
3. Script-Optimierung
Die schweren Ressourcen finden
Nutze den integrierten Befehl resmon in der Server-Konsole:
resmon 1
Worauf du achten solltest:
- Ressourcen mit hoher Idle-Time
- Datenbankabfragen, die zu lange dauern, meist ein fehlender Index
- Client-Scripts mit übermäßig vielen Draw-Calls
Häufige Performance-Fresser
| Script-Typ | Problem | Lösung |
|---|---|---|
| Fahrzeug-Spawner | Vorladen jedes Fahrzeugs | Bei Bedarf streamen und aufräumen |
| Inventarsysteme | Ständige Datenbank-Schreibvorgänge | Auf dem Client cachen, Schreibvorgänge bündeln |
| HUD / UI | Hochfrequente NUI-Updates | Update-Intervall verringern |
| Veraltete MySQL-Scripts | Synchrone Abfragen | Auf oxmysql umsteigen |
| Maps / MLOs | Unoptimierte Texturen | In das DXT-Format komprimieren |
Checkliste
- Nutze oxmysql für alle Datenbankoperationen
- Entferne ungenutzte Ressourcen aus der server.cfg
- Halte die Gesamtzahl der Ressourcen schlank
- Bevorzuge gut gepflegte, optimierte Frameworks
- Lade Datenbankdaten wo möglich verzögert (lazy)
- Räume gespawnte Entities auf
- Vermeide sehr kurze Loop-Intervalle, wo sie nicht nötig sind
- Cache häufig genutzte Daten in Lua-Tabellen
Jede Ressource erzeugt Last. Bevor du eine installierst, frag dich, ob der Server sie wirklich braucht.
4. Datenbank-Optimierung
Die Datenbank ist ein häufiger Flaschenhals. Wenige Änderungen machen einen großen Unterschied.
Indizes für häufig abgefragte Spalten hinzufügen
-- Aktuelle Indizes prüfen SHOW INDEX FROM users; -- Indizes für häufige Abfragen hinzufügen ALTER TABLE users ADD INDEX idx_identifier (identifier); ALTER TABLE users ADD INDEX idx_license (license); ALTER TABLE owned_vehicles ADD INDEX idx_owner (owner); ALTER TABLE owned_vehicles ADD INDEX idx_plate (plate); -- Bestätigen, dass die Abfrage den Index nutzt EXPLAIN SELECT * FROM users WHERE identifier = 'steam:xxxxx';
Passende Indizes verwandeln langsame Table-Scans in schnelle Lookups, oft der größte einzelne Gewinn bei der Datenbank.
Connection-Pooling nutzen
set mysql_connection_string "mysql://user:pass@localhost/db?charset=utf8mb4&maxConnections=10"
Pooling verwendet Verbindungen wieder, statt pro Abfrage eine neue zu öffnen, was den Overhead reduziert und Verbindungslimit-Fehler vermeidet.
Daten cachen, die sich nicht ändern
Frage statische Daten nicht bei jedem Aufruf aus der Datenbank ab:
-- Vermeiden: eine Abfrage bei jedem Aufruf
local vehicleName = MySQL.Sync.fetchScalar('SELECT name FROM vehicles WHERE model = ?', {model})
-- Besser: eine gecachte Lookup-Tabelle
local VehicleNames = {
["adder"] = "Truffade Adder",
["t20"] = "Progen T20",
["turismor"] = "Grotti Turismo R"
}
local vehicleName = VehicleNames[model]
5. Netzwerk- und DDoS-Schutz
Schütze den Server mit einer der gängigen Optionen vor Angriffen:
6. Asset-Optimierung
Texturen
Unkomprimierte Texturen verschwenden VRAM. Konvertiere sie ins DXT-Format, halte die Dateigrößen vernünftig und verwende DXT1 für opake Texturen, während du DXT5 für Fälle reservierst, die Transparenz benötigen.
Audio
# Audio auf Game-Qualität neu abtasten ffmpeg -i input.mp3 -ar 48000 -ac 1 -b:a 128k output.mp3 # -ar 48000 48kHz Abtastrate # -ac 1 Mono # -b:a 128k 128 kbps
48kHz in Mono reicht für nahezu alle Game-Audios aus.
7. Zielwerte
| Kennzahl | Verbesserungsbedarf | Gut | Hervorragend |
|---|---|---|---|
| Server-Tick (volle Slots) | über 10ms | 3-6ms | unter 3ms |
| Idle-Time einer Ressource | über 1ms | 0,1-0,5ms | unter 0,1ms |
| Datenbank-Abfragezeit | über 100ms | 10-50ms | unter 10ms |
| Verbindungszeit des Spielers | über 60s | 15-30s | unter 15s |
Vorher und nachher
Vor der Optimierung
- Hohe Tick-Time schon bei moderaten Spielerzahlen
- Zu viele aktive Ressourcen
- Veraltetes MySQL ohne Indizes
- Unoptimierte Texturen
- Häufiger Lag und Beschwerden
Nach der Optimierung
- Niedrige, stabile Tick-Time bei vollen Slots
- Schlanke Ressourcenliste
- oxmysql mit passenden Indizes
- Komprimierte Texturen
- Flüssiges Gameplay
Abschließende Checkliste
Hardware
- CPU mit starker Single-Thread-Leistung
- Genug RAM für deine Script-Last
- NVMe SSD
- Symmetrische Internetanbindung
Software
- OneSync aktiviert
- oxmysql installiert und konfiguriert
- Aktuelles FXServer-Artifact
- Ein stabiles Server-Betriebssystem
Scripts
- Alle Ressourcen innerhalb einer gesunden Idle-Time
- Keine veralteten synchronen MySQL-Scripts
- Inaktive Ressourcen entfernt
- Schlanke Gesamtzahl an Ressourcen
Testen
- Stabile Tick-Time bei Spitzenlast
- Über deiner normalen Spielerzahl stresstestet
- Kein Speicherwachstum über eine lange Session
- Positives Spieler-Feedback
Fazit
Wenn du Hardware, server.cfg, Scripts und die Datenbank durcharbeitest, erhältst du einen Server, der bei vollen Slots flüssig bleibt und Raum zum Wachsen hat. Behandle Optimierung als laufende Gewohnheit: überwache regelmäßig, aktualisiere Ressourcen und teste Änderungen auf einem Staging-Server, bevor du live gehst.
