Bekämpfung von Server-FPS-Einbrüchen und Entity-Lags auf einem Rust-Server
Die Serveranwendung von Rust stellt extrem hohe Anforderungen an die Single-Thread-Leistung des Prozessors und die Geschwindigkeit des Speichersubsystems. Im Gegensatz zu vielen anderen Survival-Spielen ist die Welt von Rust vollständig dynamisch: Spieler bauen riesige, mehrstöckige Basen aus Tausenden von Elementen, platzieren Hunderte von Geschütztürmen (Turrets), Fallen, Kisten und nutzen intensiv Fahrzeuge. Alle diese Objekte werden in der Terminologie der Unity-Engine als Entitäten (Entities) bezeichnet.
Wenn die Gesamtzahl der Entitäten auf der Karte (Entity Count) einen kritischen Schwellenwert überschreitet (normalerweise 150.000 bis 200.000 Objekte bei Standard-Hosting-Tarifen), sinkt die Framerate des Servers rapide. Spieler erleben Verzögerungen beim Öffnen von Kisten (Loot Lag) und die Netzwerk-Antwortzeit verschlechtert sich. In diesem Artikel analysieren wir, wie Sie Physikparameter optimieren, den Verfall von Gebäuden einstellen und die Karte von Müll befreien, um einen stabilen Serverbetrieb zu gewährleisten.
1. Begrenzung der Gesamtzahl der Entitäten und Baulimits
Jede platzierte Wand, jedes Fundament und jeder Gegenstand belasten den Server permanent, da die Engine deren Zustand, Netzwerksynchronisation und strukturelle Stabilität berechnen muss. Der erste Schritt zur Optimierung ist eine strikte Kontrolle über das unkontrollierte Wachstum von Basen.
- Die Variable
server.maxentities: Dieser Parameter legt ein theoretisches Entitätenlimit fest, das der Server einzuhalten versucht. Er stoppt das Bauen der Spieler jedoch nicht direkt. Für eine strikte Kontrolle wird empfohlen, Plugins wie EntityLimit oder die integrierten Limits der Frameworks Oxide/Carbon zu nutzen. Diese verbieten es einem Clan physisch, beispielsweise mehr als 20 Geschütztürme oder 5.000 Baublöcke pro Werkzeugschrank (Tool Cupboard) zu platzieren. - Optimierung der Baustabilität (Building Stability): Die Stabilitätsberechnung riesiger Gebäude belastet die CPU bei jeder Wandexplosion. Wenn Ihr Server ein reiner Trainings- oder Kreativserver ist (Build/Creative/Battle), deaktivieren Sie die Stabilitätssimulation vollständig mit dem Befehl:
construction.stability false
2. Konfiguration des Gebäudeverfalls (Decay Scale) — Der wichtigste Reiniger des Servers
Wenn der Verfall von Gebäuden auf dem Server deaktiviert oder zu stark verlangsamt ist, ist die Karte innerhalb von 2–3 Tagen mit ungenutzten Basen von Spielern übersät, die das Spiel verlassen haben. Häuser ohne Werkzeugschrank oder Ressourcen müssen so schnell wie möglich verschwinden, um den RAM freizugeben und die CPU zu entlasten.
Öffnen Sie die Konfigurationsdatei server.cfg im Hosting-Panel und passen Sie die folgenden Parameter an:
# Multiplikator für die Verfallsgeschwindigkeit. 1.0 ist Standard (Stroh zerfällt in wenigen Stunden, Panzerung in zwei Tagen).
# Wenn Sie die Bereinigung der Karte beschleunigen möchten, erhöhen Sie den Wert auf 1.5 oder 2.0.
decay.scale 1.0
# Zeit (in Minuten) nach der Zerstörung oder Leerung eines Werkzeugschranks, nach der das Gebäude intensiv zerfällt
decay.delay_twigs 10
decay.delay_wood 30
decay.delay_stone 60
decay.delay_metal 120
decay.delay_toptier 240
Wichtig: Deaktivieren Sie den Verfall niemals (decay.scale 0) auf öffentlichen Vanilla-Servern mit hohen Spielerzahlen. Ohne Verfall erreicht die Entitätenanzahl das Hosting-Limit lange vor dem geplanten Wipe, was zu permanenten Server-Lags führt.
3. Unity-Physik: Optimierung der Collider-Ticks
Jedes Objekt in Rust besitzt eine physische Grenze – einen Collider, der für die Registrierung von Kugeleinschlägen, Spielerkollisionen und die Fallphysik von Gegenständen zuständig ist. Standardmäßig aktualisiert Unity das Physiknetz zu häufig.
Um die CPU-Last zu senken, ändern Sie die Aktualisierungsfrequenz der Physik-Engine in Ihrem Startskript oder direkt über die Serverkonsole:
physics.bouncethreshold 2.0– Erhöht die Mindestgeschwindigkeit, die für die Berechnung des Abprallens von Objekten erforderlich ist (reduziert Mikroberechnungen für fallenden Loot).physics.steps 30– Die Anzahl der Physik-Ticks pro Sekunde. Der Standardwert liegt bei 60. Eine Reduzierung auf 30 oder 45 entlastet den primären CPU-Kern erheblich, ohne die Trefferregistrierung (Hit Registration) spürbar zu beeinträchtigen.
4. Kontrolle und Begrenzung von Fahrzeugen
Modulare Autos, Minicopter, Boote und Pferde sind dynamische Entitäten. Sie aktualisieren ständig ihre Koordinaten, berechnen die Reibungsphysik und prüfen Kollisionen, selbst wenn sie stationär in einer Spielerbasis stehen. Eine große Menge verlassener Fahrzeuge auf Straßen und Flüssen ist eine erhebliche Lag-Quelle.
| Befehl / Variable | Optimaler Wert | Auswirkung auf die Performance |
|---|---|---|
minicopter.population |
0 bis 1 |
Minicopter-Spawndichte pro Quadratkilometer. Es wird empfohlen, diesen Wert auf ein Minimum zu senken oder auf 0 zu setzen, falls Ihr Server stattdessen ein Fahrzeug-Shop-Plugin nutzt. |
modularcar.population |
1 or 2 |
Begrenzt die Anzahl modularer Fahrzeuge, die auf Straßen generiert werden und dort verrotten. |
hotairballoon.population |
0 |
Deaktiviert Heißluftballons vollständig. Sie erfordern komplexe Windphysikberechnungen, die den Serverthread im Flug stark belasten. |
5. Erzwungene Kartenreinigung und Speicherbereinigung
Neben dem automatischen Verfall sollten Administratoren eine regelmäßige Wartung der Spielwelt durchführen. Dazu werden die integrierten Einstellungen des Garbage Collectors (GC) und gezielte Löschbefehle verwendet:
- Steuerung des Garbage Collectors (GC): Standardmäßig bereinigt Rust ungenutzten Speicher blockweise, was alle paar Minuten zu kurzen Rucklern bei allen Spielern führt. Konfigurieren Sie eine häufigere, aber inkrementelle und „leichtere“ Bereinigung, indem Sie die folgenden Parameter zu den Startargumenten Ihres Servers hinzufügen:
-gc.incremental true-gc.buffer 2048(weist dem Garbage Collector einen 2-GB-Puffer zu, um abrupte Auslastungsspitzen zu verhindern). - Befehl zur Bereinigung herrenloser Gegenstände: Wenn Spieler eine Basis geraubt und Tonnen von Loot auf dem Boden hinterlassen haben, können Sie diesen manuell über die Konsole entfernen:
global.collapsestoreboxesoder löschen Sie alle frei liegenden Items auf dem Boden via:del assets/prefabs/misc/item drop/item_drop.prefab
Kurzanleitung zur Überwachung: Um in Echtzeit zu sehen, was Ihren Server belastet, geben Sie den Befehl serverinfo in die Konsole ein. Achten Sie besonders auf die Zeilen EntCount (Gesamtzahl der Entitäten) und Uptime. Wenn EntCount anomal schnell ansteigt (z. B. um 50.000 pro Tag bei geringer Spieleraktivität), überprüfen Sie Ihre Serverprotokolle auf Cheater, die Exploit-Skripte zum Massen-Spawning von Gegenständen nutzen, um Serverabstürze zu provozieren.