Minecraft Server-Optimierung



In unserem Blog haben wir bereits darüber gesprochen, wie Sie Ihren eigenen Minecraft-Server erstellen können. Seitdem sind jedoch 5 Jahre vergangen und vieles hat sich geändert. Wir teilen Ihnen die aktuellen Möglichkeiten zur Erstellung und Optimierung der Serverseite eines so beliebten Spiels mit.



In seiner 9-jährigen Geschichte (gerechnet ab dem Veröffentlichungsdatum) hat Minecraft eine erstaunliche Anzahl von Fans und Hassern sowohl unter Gelegenheitsspielern als auch unter Geeks gewonnen. Das einfache Konzept einer Würfelwelt hat sich von einer einfachen Unterhaltung zu einer universellen Umgebung für die Kommunikation und Erstellung verschiedener Objekte aus der realen Welt entwickelt.



Zusätzlich zur Konstruktion kann das Spiel Logikschaltungen erstellen , mit denen Sie vollwertige Algorithmen in Minecraft implementieren können. YouTube ist voll von sehr beeindruckenden Videos, in denen die Leute viel Mühe und Zeit investieren, um eine Kopie eines elektronischen Geräts zu erstellen oder eine detaillierte Kopie bestehender und fiktiver Architekturstrukturen zu erstellen . Alles ist nur durch die Fantasie des Spielers und die Möglichkeiten des Spieluniversums begrenzt.





Aber lassen Sie uns nicht weiter darüber sprechen, was genau die Player erstellen, sondern auf die Serverseite der Anwendung schauen und die Probleme (manchmal sehr komplex) hervorheben, die während der Arbeit unter Last auftreten können. Machen wir gleich eine Reservierung, dass wir nur über Java Edition sprechen werden.



Servertypen



Die einfachste Option ist der im Spieleclient integrierte Server. Wir haben eine Welt geschaffen, eine Taste gedrückt und jetzt wurde der Server im lokalen Netzwerk verfügbar. Diese Option kann keiner ernsthaften Belastung standhalten und wird daher nicht einmal in Betracht gezogen.



Vanille



Mojang Studios vertreibt den Serverteil des Spiels als Java-Anwendung kostenlos auf der offiziellen Website . Auf diese Weise können Sie Ihren eigenen dedizierten Server und Ihre eigene persönliche Welt erstellen und diese für die Verbindung von überall auf der Welt zur Verfügung stellen. Für diejenigen, die dies zum ersten Mal tun, gibt es ein exzellentes Tutorial im jeweiligen Spiel-Wiki.



Dieser Ansatz hat einen schwerwiegenden Nachteil, nämlich den Mangel an "out of the box" -Möglichkeiten, Plugins zu verbinden, die die Funktionalität des Servers erweitern und nicht nur die Automatisierung vieler Prozesse, sondern auch die Optimierung der Leistung ermöglichen. Darüber hinaus verbraucht der offizielle Server für jeden angeschlossenen Player ziemlich viel RAM.



Bukkit



Die Bukkit- Serveranwendung wurde von Enthusiasten basierend auf der Vanilla-Version entwickelt und erweiterte die Funktionen des Spiels erheblich, indem sie Plugins und Mods (Modifikationen) unterstützte. Es erlaubte nicht nur, dem Gameplay neue Blöcke hinzuzufügen, sondern auch verschiedene Manipulationen durchzuführen, auf die Vanille-Software nicht zugreifen kann. Interessanterweise benötigte diese Anwendung deutlich weniger Speicher.



Es ist nicht schwierig, Bukkit zu installieren. Die entsprechenden Anweisungen finden Sie in der GamePedia- Ressource . Dies ist jedoch nicht sinnvoll, da sich das Bukkit-Team seit 2014 aufgelöst hat, die Projektentwickler Mitarbeiter der Mojang Studios geworden sind und das Repository aufgegeben wird. Bukkit ist also tatsächlich tot und es ist sinnvoll, auf die nächsten beiden Projekte zu achten.



SpigotMC



Um Plugin-Entwicklern das Leben zu erleichtern, war eine API erforderlich, um mit der Spielwelt zu interagieren. Genau dies haben die Entwickler von Spigot gelöst, indem sie den Bukkit-Kern als Grundlage genommen und überarbeitet haben, um eine bessere Zuverlässigkeit und Leistung zu erzielen. Das Git-Repository des Projekts wurde jedoch aufgrund des Digital Millennium Copyright Act ( DMCA ) gesperrt, und die Quellen können von dort nicht heruntergeladen werden.



Derzeit wird SpigotMC aktiv entwickelt und genutzt. Es unterstützt alle für Bukkit entwickelten Plugins, ist jedoch nicht abwärtskompatibel. Um das DMCA-Takedown-Verbot zu umgehen, wurde ein eleganter Weg namens BuildTools geprägt. Dieses Tool macht das Verteilen einer kompilierten Anwendung überflüssig und ermöglicht es Benutzern, Spigot, CraftBukkit und Bukkit aus dem Quellcode zu kompilieren. All dies macht das DMCA-Verbot nutzlos.



PaperMC



Alles schien cool und Spigot war eine großartige Option. Aber einige Enthusiasten fanden das nicht genug und schrieben ihre eigene Spigot-Gabel "auf Steroiden" auf. Auf der Projektseite heißt es im Hauptvorteil: „Es ist schnell dumm“. Mit einer entwickelten Community können Sie aufkommende Probleme schnell lösen, und mit einer erweiterten API können Sie interessante Plugins erstellen. Sie können PaperMC mit einem einfachen Befehl aus der Dokumentation starten .



Mit der Kompatibilität von PaperMC ist alles in Ordnung, sodass die geschriebenen Plugins für SpigotMC problemlos auf PaperMC funktionieren, jedoch ohne offizielle Unterstützung. Abwärtskompatibilität mit SpigotMC ist ebenfalls vorhanden. Nachdem wir die verschiedenen Optionen zum Erstellen eines Servers aufgelistet haben, gehen wir zu den Leistungsproblemen über, die auftreten können.



Probleme und Lösungen



Das Wichtigste zu verstehen ist, dass alles, was mit der Verarbeitung der Spielwelt zusammenhängt, nur auf einem Rechenkern des physischen Servers verarbeitet wird. Wenn Sie also plötzlich einen hervorragenden Server mit einem Dutzend Rechenkernen haben, wird nur einer geladen. Der Rest wird praktisch untätig sein. Dies ist die Architektur der Anwendung, und Sie können nichts dagegen tun. Bei der Auswahl eines Servers sollten Sie also nicht auf die Anzahl der Kerne achten, sondern auf die Taktfrequenz. Je höher es ist, desto besser wird die Leistung sein.



Bei der Frage nach der RAM-Größe sollte von den folgenden Indikatoren ausgegangen werden:



  • geplante Anzahl von Spielern;
  • die geplante Anzahl von Welten auf dem Server;
  • die Größe jeder Welt.


Denken Sie daran, dass eine Java-Anwendung immer einen Headroom an RAM benötigt. Wenn Sie mit einem Speicherverbrauch von 8 Gigabyte rechnen, müssen Sie tatsächlich 12 haben. Die Zahlen sind relativ, aber das Wesentliche ändert sich nicht.



Um die Serverseite zu starten, empfehlen wir die Verwendung der Flags, die im Artikel Optimieren der JVM-G1GC-Garbage Collector-Flags für Minecraft angegeben sind . Diese "schwarze Magie" ermöglicht es dem Server, den Garbage Collector intelligent zu konfigurieren und die Verwendung von RAM zu optimieren. Es lohnt sich nicht, mehr Speicher zuzuweisen, als der Server während des maximalen Zustroms von Spielern tatsächlich verbraucht.



Block Map generieren

"Glaubst du wirklich, dass der Mond nur existiert, wenn du ihn betrachtest?" (Albert Einstein)
Brandneuer Server. Sobald der Spieler zum ersten Mal erfolgreich eine Verbindung hergestellt hat, erscheint der Spielcharakter an einem gemeinsamen Sammelpunkt (Spawn). Dies ist der einzige Ort, an dem die Spielwelt vom Server vorgeneriert wird. Gleichzeitig prüft der Client-Teil die Einstellungen, und der Schlüsselparameter ist die Zeichenentfernung. Es wird in Blöcken gemessen (der Kartenbereich ist 16 x 16 und 256 Blöcke hoch). Wie viele Blöcke dort angezeigt werden, ist genau das, was vom Server angefordert wird.



Der Server speichert die globale Weltkarte. Wenn zum Zeitpunkt des Auftretens des Spielcharakters keine generierten Blöcke darin vorhanden sind, generiert der Server diese dynamisch und speichert sie. Dies erfordert nicht nur große Rechenressourcen, sondern vergrößert auch ständig die Weltkarte. Auf einem der ältesten anarchistischen Server 2b2t(2builders2tools) Die Kartengröße hat bereits 8 TB überschritten, und die Weltgrenze liegt bei 30 Millionen Blöcken. Tausende von Geschichten sind mit diesem Server verbunden und verdienen einen eigenen Artikel in einer Reihe von Artikeln.



Eine Welt um einen Spieler herum zu generieren ist kein Problem. Das Generieren einer Welt um Hunderte von Spielern führt für kurze Zeit zu geringfügigen Serverbremsen, wonach die Last abnimmt. Die Erzeugung der Welt in der Entfernung, in der ein Client mit etwa tausend Spielern gezogen wird, ist bereits in der Lage, den Server zu "löschen" und alle Clients per Timeout von ihm zu entfernen.

Die Serversoftware hat einen Wert wie TPS (Ticks per Server - Ticks pro Sekunde). Typischerweise entspricht 1 Taktzyklus 50 ms. (1 Sekunde der realen Welt entspricht 20 Takten der Spielwelt). Wenn die Verarbeitung einer Uhr auf 60 Sekunden ansteigt, wird die Serveranwendung geschlossen, wodurch alle Spieler ausgeschaltet werden.
Der Ausweg besteht darin, die Welt auf bestimmte Koordinaten zu beschränken und eine vorläufige Blockgenerierung durchzuführen. Somit entfällt die Notwendigkeit einer dynamischen Generierung während des Spiels, und der Server muss nur die vorhandene Karte lesen. Beide Probleme werden von einem einzigen WorldBorder- Plugin behandelt .



Am einfachsten ist es, den Rand der Welt in Form eines Kreises relativ zum Spawnpunkt festzulegen (obwohl Sie ihn in einer beliebigen Form erstellen können), und zwar mit einem Befehl:



/wb set <  > spawn


Wenn der Spieler versucht, die Grenze zu überschreiten, wird er einige Blocks zurückgeworfen. Wenn dies in einer begrenzten Zeit mehrmals durchgeführt wird, wird der Eindringling gewaltsam zum Spawnpunkt teleportiert. Das Vorgenerieren der Welt ist mit dem Befehl noch einfacher:



/wb fill


Vergessen Sie nicht, die Ausführung zu bestätigen, da diese Aktion möglicherweise Spieler auf dem Server betreffen kann:



/wb confirm


Insgesamt dauerte es auf einem Intel® Xeon® Gold 6240-Prozessor ungefähr 2 Stunden, um eine Welt mit einem Radius von 5000 Blöcken (~ 40 Milliarden Blöcke) zu erstellen. Wenn Sie also mit der Vorgenerierung einer größeren Karte beginnen möchten, denken Sie daran, dass dieser Vorgang eine angemessene Zeit in Anspruch nimmt und der TPS des Servers wird ernsthaft reduziert. Denken Sie auch daran, dass selbst ein Blockradius von 5.000 ungefähr 2 GB Speicherplatz benötigt.



Trotz der Tatsache, dass die extreme Version des Plugins für Minecraft Version 1.14 entwickelt wurde, wurde experimentell festgestellt, dass es in nachfolgenden Versionen hervorragend funktioniert. Eine vollständige Liste der Befehle mit Erläuterungen finden Sie im Plugin-Forum .



Problemblöcke



Es gibt sehr viele Arten von Blöcken in Minecraft. Wir möchten die Leser jedoch auf einen Block wie TNT aufmerksam machen . Wie der Name schon sagt, ist dieser Block ein Sprengstoff (die Anmerkung des Herausgebers ist ein spielbarer Gegenstand in der virtuellen Welt und dieser Gegenstand hat nichts mit echtem Sprengstoff zu tun) . Seine Besonderheit ist, dass im Moment der Aktivierung die Schwerkraft auf sie einwirkt. Dies zwingt den Server, alle Koordinaten zu berechnen, wenn in diesem Moment der Block zu fallen beginnt.



Wenn es mehrere TNT-Blöcke gibt, bewirkt die Detonation eines Blocks eine Detonation und die Einbeziehung der Schwerkraft in die benachbarten Blöcke, wodurch diese in alle Richtungen gestreut werden. All diese schönen Mechaniken auf der Serverseite scheinen viele Operationen zur Berechnung der Flugbahn jedes der Blöcke sowie der Interaktionen mit benachbarten Blöcken zu sein. Die Aufgabe ist äußerst ressourcenintensiv, was jeder leicht überprüfen kann. Generieren und explodieren Sie einen Würfel aus TNT-Blöcken mit einer Größe von mindestens 30 x 30 x 30. Und wenn Sie dachten, Sie hätten einen guten, leistungsstarken Spielecomputer, dann haben Sie sich sehr geirrt;)



/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt




Ein ähnliches "Experiment" auf einem Server mit Intel® Xeon® Gold 6240 führte zu einem schwerwiegenden "Rückgang" des TPS und einer 80% igen Belastung der CPU während der gesamten Zeit der Blockdetonation. Wenn einer der Spieler dies kann, wirkt sich das Leistungsproblem folglich auf alle Spieler auf dem Server aus.



Eine noch härtere Option sind die Kristalle des Endes . Wenn TNT dennoch nacheinander explodiert, detonieren die Kristalle des Endes alle gleichzeitig, was theoretisch den Betrieb der Serveranwendung vollständig stoppen kann.



Dieses Szenario kann nur vermieden werden, indem die Verwendung dieser Blöcke in der Spielwelt vollständig verboten wird. Zum Beispiel mit dem WorldGuard- Plugin . Bitte beachten Sie, dass dieses Plugin selbst ohne ein anderes WorldEdit- Plugin nicht funktioniert... Installieren Sie also zuerst WorldEdit und dann WorldGuard.



Fazit



Kompetentes Game Server Management ist keine leichte Aufgabe. Schwierigkeiten und reduzierte Leistung erwarten Sie auf Schritt und Tritt, insbesondere wenn Sie die Mechanik des Spiels nicht berücksichtigen. Es ist unmöglich, alles vorherzusehen, da die Spieler manchmal sehr kreativ versuchen, den Server zu zwingen, etwas zu tun, für das er nicht gedacht war. Nur ein angemessenes Gleichgewicht zwischen Risiken und festgelegten Grenzwerten ermöglicht es dem Server, kontinuierlich zu arbeiten und seine Leistung nicht auf kritische Werte zu reduzieren.



In der Quarantäne haben einige unserer Mitarbeiter ihre Lieblingsbüros verpasst und beschlossen, sie in Minecraft neu zu erstellen. Sie haben auch die Möglichkeit, uns zu besuchen, ohne Ihre Gesundheit zu gefährden und Zeit auf der Straße zu verschwenden.

minecraft.selectel.ru ( 1.15.2), - -1 -2. , .



, , «» .



All Articles