Ein Server, der „laggt“, hat meist nicht zu wenig Hardware. Häufiger steckt eine konkrete Ursache dahinter: eine zu große Simulationsdistanz, die Generierung von neuem Gelände, eine überfüllte Farm oder ein schlecht geschriebenes Plugin. Wir zeigen, wie Sie Lag messen, seine Ursache finden und beheben – von schnellen Anpassungen über die Einstellungen von Paper bis zum Profiling.
Was Sie brauchen
- Ein Minecraft-Server bei StormHost (wir empfehlen Paper oder Purpur; Teile dieser Anleitung gelten auch für Fabric und NeoForge)
- Zugriff auf die Registerkarten Konsole, Servereigenschaften, Startoptionen und Dateien
- Ein Backup des Servers, bevor Sie die Konfiguration ändern (Anleitung)
- Etwa 40 Minuten
So erkennen Sie, was laggt#
Ein Minecraft-Server führt das Spiel in Ticks aus. Er sollte 20 davon pro Sekunde schaffen, für einen Tick hat er also 50 Millisekunden. Zwei Werte müssen Sie kennen:
| Wert | Was er bedeutet | Gut | Problem |
|---|---|---|---|
| TPS (Ticks pro Sekunde) | Wie viele Ticks der Server tatsächlich pro Sekunde schafft. | 20 | Unter 19 bemerken Spieler die Verlangsamung, unter 15 ist das Spiel unangenehm. |
| MSPT (Millisekunden pro Tick) | Wie viele Millisekunden ein Tick dauert. | Unter 50 ms, ideal unter 35 ms | Über 50 ms kommt der Server nicht hinterher, und die TPS sinken. |
MSPT ist der genauere Indikator: Ein Server mit einer MSPT von 45 ms hat noch 20 TPS, aber keinerlei Reserve. Sobald die MSPT 50 ms überschreitet, beginnen die TPS zu sinken.
Die Werte prüfen Sie in der Konsole (Befehle ohne Schrägstrich eingeben):
tps
mspt
spark tpstps– durchschnittliche TPS über die letzten 1, 5 und 15 Minuten (Paper, Purpur).mspt– durchschnittliche, kürzeste und längste Tickzeit (Paper, Purpur).spark tps– TPS, MSPT (Minimum, Median, 95. Perzentil, Maximum) und CPU-Auslastung. Funktioniert überall, wo spark installiert ist (Paper hat es eingebaut).
Kommt der Server über längere Zeit nicht hinterher, zeigt die Konsole:
Can't keep up! Is the server overloaded? Running 2500ms or 50 ticks behindDer Server sagt damit, dass er 2,5 Sekunden (50 Ticks) zurückliegt und diese Ticks überspringt. Eine einzelne Meldung beim Start oder während der Generierung von Gelände ist in Ordnung. Wiederholt sie sich alle paar Minuten, machen Sie mit dieser Anleitung weiter.
Lag des Servers oder etwas anderes?#
| Was der Spieler sieht | Ursache | Wo suchen |
|---|---|---|
| Blöcke kehren nach dem Abbauen zurück, Mobs frieren ein, alle Spieler haben dasselbe Problem | Lag des Servers (niedrige TPS) | Diese Anleitung |
| Niedrige FPS, ruckelndes Bild, andere Spieler haben aber keine Probleme | Leistung des Computers des Spielers | Grafikeinstellungen im Spiel, Client-Mods |
| Der Spieler „springt“ zurück, hoher Ping nur bei ihm | Verbindung des Spielers | Der Ping des Spielers mit spark ping --player <NICK> |
| Der Server ist in Ordnung, aber neue Gebiete laden langsam | Generierung von Gelände | Vorgenerierung mit Chunky |
Schnelle Erfolge#
Sortiert von der größten Wirkung zur kleinsten. Die meisten erledigen Sie in weniger als zehn Minuten.
| Reihenfolge | Schritt | Warum es hilft | Wo |
|---|---|---|---|
| 1 | Paper oder Purpur statt Vanilla verwenden | Paper enthält Hunderte Optimierungen und Fehlerbehebungen, die Vanilla nicht hat. | Registerkarte Software, siehe Servertypen |
| 2 | Die Welt vorgenerieren und ihre Grenze festlegen | Die Generierung von neuem Gelände ist das Anspruchsvollste, was ein Server tut. | Chunky |
| 3 | simulation-distance auf 6–8 und view-distance auf 8 senken | Weniger Chunks pro Spieler = weniger Arbeit in jedem Tick. | Sicht- und Simulationsdistanz |
| 4 | Die Ursache mit einem Profiler finden | Zeigt das konkrete Plugin, die Farm oder das Entity. | spark |
| 5 | Entities und Farmen begrenzen | Hunderte Tiere in einem Gehege oder eine überfüllte Farm ruinieren die TPS. | Einstellungen von Paper |
| 6 | Die Standard-Startparameter beibehalten | Das Standard-Preset ist auf Ihre Speichergröße abgestimmt. | Startparameter |
| 7 | Server, Plugins und Mods aktualisieren | Neue Versionen beheben oft Speicherlecks und langsamen Code. | Registerkarten Software und Plugins |
Plugins zum „Lag-Entfernen“
Plugins, die wundersame Beschleunigung versprechen (regelmäßiges Löschen von Gegenständen auf dem Boden, „RAM leeren“, erzwungene Garbage Collection), lösen das Problem nicht. Sie löschen Gegenstände der Spieler, verursachen oft Ruckler und verdecken nur die Ursache. Finden Sie die echte Ursache mit spark.
Startparameter und Speicher#
Startparameter (Flags) sind die Parameter, mit denen Java startet. Sie legen die Speichergröße für das Spiel (den Heap), Obergrenzen für Speicher außerhalb des Heaps und das Verhalten des Garbage Collectors fest, der nicht mehr benötigte Daten aus dem Speicher räumt. Im Kundenbereich finden Sie sie in der Registerkarte Startoptionen im Abschnitt Startparameter.
Heap und Obergrenzen berechnet der Kundenbereich selbst anhand der Größe Ihres Tarifs, des Servertyps, der Java-Version und der Anzahl der Plugins oder Mods. Er berechnet sie beim Anlegen des Servers, nach einem Tarifwechsel, nach einem Wechsel von Typ oder Version und vor einem Start aus dem Portal neu, wenn sich seit dem letzten Mal etwas davon geändert hat. Einen Startbefehl, den Sie im Panel von Hand bearbeitet oder als eigenen festgelegt haben, überschreibt er nicht. Hat ein solcher Befehl einen Heap, der für einen kleineren Tarif zu groß ist, starten wir den Server nach dem Tarifwechsel nicht (er würde sofort abstürzen) und senden Ihnen eine E-Mail.
| Option | Was sie tut | Wann verwenden |
|---|---|---|
| Preset – Empfohlen (G1) | Der Garbage Collector G1 mit Einstellungen nach der Dokumentation von Paper. Standard für alle Servertypen. | Die meisten Server. |
| Preset – Kurze Pausen (ZGC) | Ein Garbage Collector mit sehr kurzen Pausen auf Kosten höherer CPU-Last. Nur Java 21 und neuer. | Große Server ab 16 GB, wenn spark gc lange Pausen zeigt und die CPU Reserven hat. |
| Preset – Proxy | Parameter für Velocity und BungeeCord. | Wird nur für Proxy-Server angeboten. |
| Preset – Ohne Tuning | Nur Heap-Größe und Speicherobergrenzen. | Vorübergehend, bei der Fehlersuche, ob die Parameter einen Fehler verursachen. |
| Eigene Parameter | Zusätzliche Parameter. Erlaubt sind nur -XX:…, -D…=… und --add-modules=…, höchstens 30. Der Heap lässt sich nicht setzen. Die Obergrenzen für Netzwerkpuffer (-XX:MaxDirectMemorySize), kompilierten Code (-XX:) und geladene Klassen (-XX:MaxMetaspaceSize) schon; der Heap wird dann neu berechnet. | Wenn die Anleitung eines Plugins oder Mods eine bestimmte -D-Eigenschaft verlangt oder ein Voice-Chat-Plugin mehr Netzwerkpuffer braucht. |
Alle Presets haben dieselben Schutzmechanismen: Obergrenzen für Netzwerkpuffer, kompilierten Code und geladene Klassen, MALLOC_ARENA_MAX=2 (weniger Speicherbereiche des Allokators) und ab Java 17 -XX: (gibt ungenutzten Speicher an das System zurück). Purpur erhält zusätzlich automatisch --add-modules= (schnellere Berechnungen, die Purpur nutzen kann).
Schaltflächen in diesem Abschnitt:
- Speichern – die Einstellungen werden beim nächsten Start verwendet.
- Speichern und neu starten – der Server startet sofort neu. Startet er mit den neuen Parametern nicht, setzt der Kundenbereich sie zurück, und Sie sehen die Meldung
Die Parameter sind nicht kompatibel, auf die vorherigen Einstellungen zurückgesetzt. - Vorherige wiederherstellen – stellt die letzten funktionierenden Einstellungen wieder her.
- Empfohlene verwenden – erscheint, wenn der Heap für Ihren Tarif zu groß ist oder der Startbefehl keine Speicherobergrenzen hat. Setzt den empfohlenen Befehl.
- Jetzt neu berechnen – berechnet die Parameter sofort neu, damit Sie nicht auf den nächsten Start aus dem Portal warten müssen.
Unter Speicheraufteilung sehen Sie, wie viel auf den Heap entfällt und wie viel für alles andere bleibt. Nach einer automatischen Neuberechnung zeigt der Kundenbereich etwa Wir haben den Startbefehl an die neue RAM-Größe angepasst: Heap 8,2 → 9,6 GB.
Betreiben Sie einen Server außerhalb von StormHost? Der Generator für Startskripte erstellt ein Startskript mit derselben Berechnung für Docker, Linux und Windows.
Warum der Heap nicht der ganze RAM ist#
Der Heap (-Xmx) wächst nie über seine eigene Grenze hinaus. Was wächst, ist der Speicher außerhalb des Heaps: Netzwerkpuffer, geladene Klassen von Plugins und Mods, kompilierter Code, Threads und der Allokator des Systems. Am stärksten wachsen die Netzwerkpuffer – ohne Obergrenze können sie die Größe des Heaps erreichen; ein Server mit 6 GB Heap kann so am Ende 12 GB belegen.
Der Container des Servers hat ein hartes Limit, das 5 % über dem Tarif liegt (10 % bei Tarifen bis 4 GB, 15 % bis 2 GB), und keinen Swap. Überschreitet der Prozess das Limit, beendet ihn das System. Die Konsole zeigt Out of memory: true, und im Log des Servers steht überhaupt kein Fehler.
Deshalb hat jeder große Teil außerhalb des Heaps eine Obergrenze, alles zusammen liegt mit Reserve unter der Tarifgröße, und der Heap bekommt den Rest. Stößt ein Teil an seine Obergrenze, schreibt der Server einen Fehler ins Log (OutOfMemoryError: Direct buffer memory oder Metaspace), statt stillschweigend abzustürzen, und dieser Fehler weist auf den Schuldigen hin.
| Speicher des Tarifs | Heap (Paper, 20 Plugins) | Heap (Modpack, 200 Mods) | Limit des Containers |
|---|---|---|---|
| 10 GB | 7872 MB | 7040 MB | 10.752 MB |
| 12 GB | 9792 MB | 8896 MB | 12.902 MB |
| 16 GB | 13.504 MB | 12.672 MB | 17.203 MB |
| 24 GB | 21.056 MB | 20.224 MB | 25.805 MB |
Der Heap hat dieselbe Mindest- und Höchstgröße (-Xms = -Xmx) und wird direkt beim Start belegt. Deshalb zeigt der Speichergraph im Panel von Anfang an einen hohen Wert. Das Panel zählt außerdem den Dateicache der Welt mit, den das System bei Bedarf freigibt. Ein Wert nahe am Limit bedeutet für sich allein keinen Absturz.
Die Dokumentation von Paper empfiehlt unabhängig von der Spielerzahl mindestens 6–10 GB Heap und warnt, dass mehr Speicher ab einem gewissen Punkt die Leistung nicht verbessert.
Wann es Zeit für einen größeren Tarif ist
Zeigt spark health den Heap auch nach der Garbage Collection ständig über 90 % (spark gc meldet häufige und lange Pausen) und haben Sie Speicherlecks in Plugins ausgeschlossen, braucht der Server mehr Speicher. Zu einem größeren Tarif wechseln Sie in der Registerkarte Tarif ändern (Anleitung). Die Parameter werden nach dem Upgrade automatisch neu berechnet und gelten ab dem nächsten Start.
Sicht- und Simulationsdistanz#
Die Welt ist in Chunks aufgeteilt (Säulen von 16 × 16 Blöcken). Der Server hält um jeden Spieler Chunks in einem bestimmten Radius geladen:
view-distance– wie viele Chunks um den Spieler der Server an das Spiel sendet (was der Spieler sieht). Wirkt sich vor allem auf Speicher und Netzwerk aus.simulation-distance– der Radius, in dem Chunks „leben“: Mobs bewegen sich, Pflanzen wachsen, Redstone und Farmen arbeiten. Wirkt sich vor allem auf die CPU und damit auf die TPS aus.
Die Anzahl der Chunks wächst mit dem Quadrat der Entfernung. Mit view-distance=10 hält der Server um jeden Spieler 441 Chunks, mit 8 nur 289 (ein Drittel weniger). Für die Simulation gilt dasselbe.
| Situation | view-distance | simulation-distance |
|---|---|---|
| Ein kleiner Server mit Freunden, kein Lag | 10 | 10 |
| Ein öffentliches Survival, 20+ Spieler | 8–10 | 6–8 |
| Der Server laggt, und Sie wissen nicht, warum | 8 | 6 |
| Minispiele, Lobby | 6–8 | 4–6 |
Sie stellen beides in der Registerkarte Servereigenschaften in der Gruppe Welt ein (alle Einstellungen). Eine Simulationsdistanz unter 5 empfehlen wir nicht – größere Farmen funktionieren dann nicht mehr, weil ein Teil der Farm außerhalb des simulierten Bereichs liegt.
Paper und einzelne Welten
Auf Paper können Sie die Distanzen in spigot.yml auch für jede Welt getrennt einstellen (world-settings › default › view-distance und simulation-distance). Der Wert default bedeutet „server.properties verwenden“.
Einstellungen von Paper#
Paper und Purpur haben eine eigene Konfiguration im Ordner config:
| Datei | Was sie enthält |
|---|---|
config/paper-global.yml | Einstellungen für den ganzen Server (Proxy, Laden von Chunks, Spam-Limits). |
config/ | Standardeinstellungen für alle Welten. Hier stellen Sie die Leistung ein. |
world/ | Abweichungen für eine Dimension (ab Version 26.1; <dimension> ist overworld, the_nether oder the_end). In älteren Versionen eine Datei paper-world.yml im Ordner der Welt, zum Beispiel world_. |
Bearbeiten Sie immer paper-world-defaults.yml. Öffnen Sie die Datei im Editor in der Registerkarte Dateien, suchen Sie den vorhandenen Abschnitt (zum Beispiel chunks:) und ändern Sie den Wert darin. Fügen Sie denselben Abschnitt nicht ein zweites Mal hinzu – bei einem doppelten Schlüssel lädt der Server die Datei entweder nicht oder verwendet nur einen davon, und Ihre Änderung wirkt nicht.
YAML-Regeln
Rücken Sie nur mit Leerzeichen ein (nie mit Tabulatoren), verwenden Sie auf derselben Ebene dieselbe Einrückung und setzen Sie nach dem Doppelpunkt ein Leerzeichen. Erstellen Sie vor dem Bearbeiten ein Backup. Starten Sie den Server nach dem Bearbeiten neu – den Befehl paper reload empfehlen wir nicht, weil manche Werte nur beim Start geladen werden.
Ausgewählte Einstellungen mit dem größten Einfluss auf die Leistung:
| Einstellung | Was sie tut | Empfohlener Wert | Wann ändern |
|---|---|---|---|
chunks. | Lässt Spieler nicht in einen Chunk, der noch nicht geladen ist (schneller Elytraflug, Fahrt mit der Lore). Der Server muss Chunks dann nicht mitten im Tick zwangsweise laden. | true | Standard false. Schalten Sie es auf Servern mit Elytren und schnellem Reisen ein. |
chunks. | Wie viele Entities eines bestimmten Typs in einem Chunk gespeichert werden. Schützt vor Chunks, die mit Tausenden Pfeilen oder Erfahrungskugeln überflutet sind. | arrow: 16, experience_orb: 16, snowball: 8, ender_pearl: 8, fireball: 8, small_fireball: 8 | Standard ohne Grenze (-1). Tragen Sie hier keine Tiere oder Mobs ein – der Rest würde beim Speichern verschwinden. |
collisions. | Nach wie vielen Kollisionen ein Entity keine weiteren Kollisionen mehr berechnet. | 2 | Standard 8. Ein niedrigerer Wert entlastet Orte, an denen sich viele Mobs drängen, erheblich. Mobs in einer Menge schieben sich dann weniger – funktioniert dadurch eine Farm nicht mehr, erhöhen Sie den Wert wieder. |
environment. | Beschleunigt die Berechnung von Explosionen (TNT, Creeper). | true | Standard false. Immer einschalten; das Ergebnis der Explosionen ändert sich nicht. |
misc. | Wie Redstone berechnet wird: VANILLA, EIGENCRAFT, ALTERNATE_CURRENT. | ALTERNATE_CURRENT | Standard VANILLA. Die alternative Berechnung entlastet Redstone-Staub erheblich, verändert aber in seltenen Fällen das Verhalten von Schaltungen, die von der Reihenfolge der Aktualisierungen abhängen. Informieren Sie Spieler mit technischen Bauten. |
hopper. | Schaltet das Plugin-Ereignis ab, das bei jedem von einem Trichter bewegten Gegenstand ausgelöst wird. | false | true nur, wenn kein Plugin Trichterbewegungen überwacht (Truhenschutz, Filter). Sonst würden Schutzfunktionen nicht mehr greifen. |
tick-rates.mob-spawner | Wie oft (in Ticks) Spawner ihre Umgebung prüfen und spawnen. | 2 | Standard 1. Der Spawner wird nur jeden zweiten Tick geprüft. Paper zählt seine Verzögerung schneller herunter, er spawnt Mobs also etwa genauso oft. -1 schaltet alle Spawner ab. |
tick-rates.grass-spread | Wie oft (in Ticks) der Server versucht, Gras auszubreiten. | 4 | Standard 1. Gras breitet sich langsamer aus; Spieler bemerken das meist nicht. |
entities. | Die Entfernung vom Spieler, in der Mobs zufällig (soft) oder sofort (hard) despawnen. Vanilla: 32 und 128 Blöcke. | Zum Beispiel monster: soft: 30, hard: 72 | Auf vollen Servern. Ein kleineres hard schafft Platz für neue Mobs näher an den Spielern. |
environment. | Schatzkarten von Dorfbewohnern und aus Truhen. Die Suche nach der nächsten Struktur ist sehr anspruchsvoll. | true | false, wenn spark Lag beim Handel mit Kartografen oder beim Öffnen von Truhen zeigt. |
entities. | Ob Rüstungsständer ticken (Physik, Schwerkraft). | true | false auf Servern mit Tausenden dekorativer Rüstungsständer. Sie fallen dann nicht, und manche Plugins funktionieren mit ihnen womöglich nicht. |
So sehen die Änderungen in der Datei aus (nur die geänderten Teile; die übrigen Zeilen der Datei lassen Sie unverändert):
chunks:
entity-per-chunk-save-limit:
arrow: 16
experience_orb: 16
snowball: 8
ender_pearl: 8
prevent-moving-into-unloaded-chunks: true
collisions:
max-entity-collisions: 2
entities:
spawning:
despawn-ranges:
monster:
hard: 72
soft: 30
environment:
optimize-explosions: true
misc:
redstone-implementation: ALTERNATE_CURRENT
tick-rates:
grass-spread: 4
mob-spawner: 2spigot.yml und bukkit.yml#
Paper liest außerdem die älteren Konfigurationsdateien spigot.yml und bukkit.yml im Hauptordner des Servers.
spigot.yml#
Alle Einstellungen stehen im Abschnitt world-settings › default.
| Einstellung | Was sie tut | Empfohlener Wert | Wann ändern |
|---|---|---|---|
entity-activation-range. | In welcher Entfernung (Blöcke) von einem Spieler Tiere voll ticken. Weiter entfernt ticken sie nur gelegentlich. | 16–24 | Standard 32. Senken Sie den Wert auf Servern mit großen Tiergehegen. |
entity-activation-range. | Dasselbe für Monster. | 24 | Standard 32. |
entity-activation-range. | Dasselbe für Dorfbewohner. | 16 | Standard 32. Dorfbewohner gehören zu den anspruchsvollsten Entities. Ein zu niedriger Wert verlangsamt Dorfbewohner-Farmen. |
entity-activation-range. | Andere Entities (Gegenstände auf dem Boden, Loren). | 8–12 | Standard 16. |
entity-activation-range. | Räuber (Raider). | 48 | Standard 64. Ein zu niedriger Wert macht Überfälle kaputt. |
merge-radius.item | Bis zu welcher Entfernung (Blöcke) gleiche Gegenstände auf dem Boden verschmelzen. | 2.5 | Standard 0.5. Ein größerer Wert = weniger Entities auf dem Boden. |
merge-radius.exp | Dasselbe für Erfahrungskugeln. -1 = Verhalten von Vanilla. | 3.0 | Standard -1. |
nerf-spawner-mobs | Mobs aus Spawnern haben keine KI (sie bewegen sich nicht und greifen nicht an). | true | Standard false. Spart Leistung bei XP-Farmen, Mobs aus Spawnern greifen dann aber nicht an – informieren Sie die Spieler. |
ticks-per. | Nach wie vielen Ticks ein Trichter einen Gegenstand bewegt. | 8 | Der Standard ist 8 (Vanilla). Ein höherer Wert verlangsamt alle Trichter – das verändert das Verhalten von Redstone-Taktgebern. |
bukkit.yml#
| Einstellung | Was sie tut | Empfohlener Wert | Wann ändern |
|---|---|---|---|
spawn-limits.monsters | Die maximale Anzahl von Monstern (pro Spieler, wenn in Paper per-player-mob-spawns eingeschaltet ist). | 50 | Standard 70. Weniger Monster = weniger Berechnungen. |
spawn-limits.animals | Die maximale Anzahl natürlich spawnender Tiere. | 8 | Standard 10. |
spawn-limits., water-ambient, ambient | Fische, Tintenfische, Fledermäuse. | 3, 10, 5 | Standard 5, 20, 15. |
ticks-per.monster-spawns | Nach wie vielen Ticks der Server versucht, Monster zu spawnen. | 2 | Standard 1. |
ticks-per.autosave | Nach wie vielen Ticks die ganze Welt gespeichert wird (6000 = 5 Minuten). | 6000 | Nicht ändern. Paper speichert Chunks laufend. |
Die Welt mit Chunky vorgenerieren#
Erreicht ein Spieler einen Ort, an dem noch niemand war, muss der Server das Gelände generieren. Das ist der anspruchsvollste Vorgang überhaupt: Ein einziger Spieler mit Elytren kann die TPS des ganzen Servers drücken. Die Lösung ist, das Gelände im Voraus zu generieren und die Weltgrenze so festzulegen, dass Spieler nicht über das vorbereitete Gebiet hinauskommen.
Das Plugin Chunky generiert Gelände im Hintergrund, schrittweise und pausierbar. Es gibt es für Paper, Purpur und Folia und als Mod für Fabric, Forge und NeoForge.
Installieren Sie Chunky in der Registerkarte Plugins (bei Mods Mods) › Durchsuchen: Suchen Sie nach
Chunkyund klicken Sie auf Installieren. Starten Sie den Server danach neu (Anleitung zu Plugins).Legen Sie in der Konsole den Mittelpunkt der Weltgrenze fest:
text worldborder center 0 0worldborder center– legt den Mittelpunkt der Weltgrenze fest.0 0– die Koordinaten X und Z des Mittelpunkts. Meist der Mittelpunkt der Welt oder die Koordinaten des Spawns.
Legen Sie die Größe der Grenze fest:
text worldborder set 10000worldborder set– legt die Größe der Grenze fest.10000– der Durchmesser in Blöcken. Die Welt wird 10.000 × 10.000 Blöcke groß, also 5000 Blöcke vom Mittelpunkt in jede Richtung.
Übergeben Sie die Grenze an Chunky:
text chunky worldborderChunky übernimmt Mittelpunkt und Radius von der Weltgrenze.
Starten Sie die Generierung:
text chunky startDie Konsole zeigt regelmäßig den Fortschritt in Prozent, die Anzahl der generierten Chunks und eine Schätzung der verbleibenden Zeit.
Weitere Befehle:
| Befehl | Was er tut |
|---|---|
chunky pause | Pausiert die Generierung und speichert den Fortschritt. Praktisch, wenn viele Spieler kommen. |
chunky continue | Setzt eine pausierte Generierung fort. |
chunky cancel | Bricht die Aufgabe ab. Generierte Chunks bleiben erhalten. |
chunky progress | Gibt den Fortschritt aus (praktisch im Spiel). |
chunky silent | Schaltet Fortschrittsmeldungen in der Konsole aus oder ein. |
chunky start world square 0 0 5000 | Startet die Generierung ohne Weltgrenze: Welt world, quadratische Form, Mittelpunkt 0 0, Radius 5000 Blöcke. |
chunky world | Wählt eine Welt. Im Spiel ohne Namen wählt der Befehl die Welt, in der Sie stehen. |
Nether und End#
Der Nether ist achtmal kleiner als die Oberwelt (1 Block im Nether = 8 Blöcke in der Oberwelt). Für eine Grenze mit einem Durchmesser von 10.000 Blöcken in der Oberwelt (Radius 5000) genügt im Nether ein Radius von 625 Blöcken. Verbinden Sie sich mit dem Spiel, gehen Sie in den Nether und geben Sie im Chat ein:
/chunky world
/chunky center 0 0
/chunky radius 625
/chunky start/chunky world– ohne Namen wählt der Befehl die Welt, in der Sie gerade sind (den Nether)./chunky center 0 0– der Mittelpunkt der Generierung./chunky radius 625– der Radius in Blöcken./chunky start– startet die Generierung.
Eine Weltgrenze im Nether (/worldborder set 1250, im Nether eingegeben) legen Sie nur auf Paper und Purpur fest, ab Version 1.21.9 auch anderswo – erst ab dieser Version hat jede Dimension eine eigene Grenze. In älteren Versionen von Vanilla, Fabric und NeoForge würde der Befehl auch die Grenze in der Oberwelt ändern.
Das End können Sie kleiner generieren (zum Beispiel mit einem Radius von 2000–3000 Blöcken); Spieler bewegen sich dort hauptsächlich auf den Inseln.
Festplatte und CPU
Eine vorgenerierte Welt belegt Speicherplatz – je größer die Grenze, desto mehr. Beginnen Sie mit einem kleineren Durchmesser (5000–10.000 Blöcke) und behalten Sie den freien Platz in der Registerkarte Dateien oder in der Festplattenanzeige in der Konsole im Blick. Die Generierung lastet die CPU voll aus: Führen Sie sie aus, wenn wenige Spieler auf dem Server sind, oder pausieren Sie sie zwischendurch mit chunky pause.
Nach einem Neustart des Servers setzt sich die Generierung nicht von selbst fort. Machen Sie mit chunky continue weiter (oder setzen Sie continue-on-restart: true in plugins/).
Diagnose mit spark#
spark ist ein Profiler: Während der Server läuft, zeichnet er auf, was der Server tut, und zeigt das Ergebnis als übersichtlichen Baum mit Prozentangaben. Paper hat ihn ab Version 1.21 eingebaut (Purpur ebenfalls); auf Fabric und NeoForge installieren Sie den Mod spark von Modrinth. Auf einem Velocity-Proxy lautet der Befehl sparkv.
Schneller Überblick#
| Befehl (in der Konsole) | Was er zeigt |
|---|---|
spark tps | TPS über die letzten 5 s, 10 s, 1 min, 5 min und 15 min, Tickzeiten und CPU-Auslastung. Färbt die Werte je nach Qualität grün, orange oder rot. |
spark health | Einen Link zu einer Live-Übersicht: TPS, MSPT, CPU, Speicher, Festplatte. Aktualisiert sich alle 10 Sekunden. |
spark gc | Verlauf des Garbage Collectors: wie oft und wie lange er Speicher aufgeräumt hat. |
spark ping | Durchschnittlicher Ping der Spieler. Mit --player <NICK> der Ping eines Spielers. |
spark tickmonitor --threshold-tick 50 | Überwacht Ticks, die länger als 50 ms dauern, und gibt jeden aus. Geben Sie spark tickmonitor erneut ein, um die Überwachung zu beenden. |
Profiling Schritt für Schritt#
Warten Sie, bis der Server laggt (oder bis er seine übliche Spielerzahl hat). Ein Profil eines leeren Servers zeigt nichts.
Starten Sie in der Konsole den Profiler für 10 Minuten:
text spark profiler start --timeout 600spark profiler start– startet den Profiler.--timeout 600– stoppt ihn nach 600 Sekunden (10 Minuten) automatisch und lädt das Ergebnis hoch.
Warten Sie 10 Minuten. In der Konsole erscheint ein Link zum Profil (
spark.lucko.me/…).Fügen Sie den Link in den Analysator für spark-Profile ein. Er zeigt, was den Server bremst und was Sie ändern sollten.
Hochladen müssen Sie das Profil nicht: Mit der Option --save-to-file (zum Beispiel spark profiler start --timeout 600 --save-to-file) speichert spark es als Datei .sparkprofile im Ordner plugins/spark (auf Fabric und NeoForge config/spark). Laden Sie sie in der Registerkarte Dateien herunter und in den Analysator hoch.
Um den Profiler vorzeitig zu stoppen, geben Sie spark profiler stop ein. Für kurze Spitzen (der Server „friert“ gelegentlich für eine Sekunde ein) verwenden Sie:
spark profiler start --only-ticks-over 100--only-ticks-over 100– zeichnet nur Ticks auf, die länger als 100 ms dauern. Das filtert den normalen Betrieb heraus und lässt nur die „laggenden“ Ticks übrig. Wählen Sie einen Wert zwischen 50 und 100.
So lesen Sie das Ergebnis#
Möchten Sie den Baum selbst durchgehen, öffnen Sie den Link zum Profil im Browser:
- Klappen Sie in der Liste der Threads Server thread auf – den Hauptthread des Spiels. Probleme in anderen Threads (Laden von Chunks, Netzwerk) sind seltener.
- Klappen Sie Knoten per Klick auf und achten Sie auf die Prozentangaben. Folgen Sie immer dem Pfad mit dem größten Anteil.
- Zeit in
Thread.sleep()oder im Zustand „parked“ ist in Ordnung – der Server wartet auf den nächsten Tick, weil er Reserven hat. - Typische Befunde:
| Was Sie im Profil sehen | Was es bedeutet | Was zu tun ist |
|---|---|---|
Ein großer Anteil in tickEntities oder bei Entities (Villager, Zombie …) | Zu viele Entities. | entity-activation-range, Spawn-Limits, Farmen prüfen (siehe Wie viele Entities auf dem Server sind). |
| Ein großer Anteil bei der Generierung von Chunks | Spieler erkunden neues Gelände. | Chunky und eine Weltgrenze. |
Der Paketname eines Plugins (zum Beispiel com.example.plugin) | Ein bestimmtes Plugin. | Aktualisieren, einstellen oder ersetzen. |
| Redstone, Trichter | Technische Bauten. | redstone-implementation, hopper. (vorsichtig). |
- Schalten Sie in der oberen Leiste die Ansicht auf Sources um – sie zeigt für jedes Plugin oder jeden Mod einen eigenen Baum, sodass Sie sofort sehen, was die größte Last verursacht.
Den Link zum Profil können Sie dem Autor des Plugins oder unserem Support senden. Er enthält keine Passwörter und keine Dateien des Servers.
Wie viele Entities auf dem Server sind#
Auf Paper gibt der Befehl paper entity list die Anzahl der Entities nach Typ aus. In der Konsole müssen Sie zusätzlich die Welt angeben:
paper entity list * minecraft:overworld
paper entity list minecraft:villager minecraft:overworldpaper entity list– listet Entities auf.*– ohne Filter; listet alle Entity-Typen mit Anzahl auf (die erste Zahl sind tickende Entities, die zweite nicht tickende).minecraft:villager– ein Filter für einen Typ. Die Ausgabe zeigt dann die Koordinaten der Chunks mit den meisten dieser Entities.minecraft:overworld– die Welt (minecraft:the_nether,minecraft:the_endfür die anderen Dimensionen). Im Spiel müssen Sie keine Welt angeben; es wird die verwendet, in der Sie stehen.
Sehen Sie sich die Stelle dann im Spiel an und verkleinern Sie die Farm oder das Gehege.
Mods für die Leistung (Fabric und NeoForge)#
Fabric und NeoForge haben die Optimierungen von Paper nicht, es gibt aber serverseitige Mods mit demselben Ziel. Alle finden Sie auf Modrinth (in der Registerkarte Mods › Durchsuchen):
| Mod | Was er tut | Loader |
|---|---|---|
| Lithium | Optimiert Physik, KI von Mobs und weitere Teile des Spiels, ohne das Verhalten zu ändern. | Fabric, NeoForge |
| FerriteCore | Senkt den Speicherverbrauch. | Fabric, Forge, NeoForge |
| ModernFix | Beschleunigt den Start und senkt den Speicherverbrauch, vor allem bei großen Modpacks. | Fabric, Forge, NeoForge |
| C2ME | Paralleles Generieren und Laden von Chunks. Greift tief in die Arbeit mit der Welt ein – erstellen Sie vor dem Einsatz ein Backup. | Fabric |
| spark | Der oben beschriebene Profiler. | Fabric, Forge, NeoForge |
| Chunky | Vorgenerierung der Welt. | Fabric, Forge, NeoForge |
Wählen Sie immer den Mod für Ihre genaue Minecraft- und Loader-Version. Details stehen unter Mods und Modpacks.
Wann es Zeit für ein Upgrade ist#
Ein Upgrade des Tarifs ist sinnvoll, wenn:
- spark zeigt, dass die Last gleichmäßig verteilt ist (kein einzelnes Plugin und keine Farm dominiert) und die MSPT bei Ihrer üblichen Spielerzahl über 40 ms bleibt,
spark healthden Speicher ständig an der Grenze zeigt und der Garbage Collector nicht hinterherkommt,- Sie ein großes Modpack hinzufügen oder deutlich mehr Spieler planen.
Beansprucht ein Plugin oder eine Farm den Großteil der Zeit, hilft mehr Leistung nicht – Sie müssen die Ursache beseitigen.
Überprüfung#
- Starten Sie den Server nach Ihren Änderungen neu und lassen Sie ihn mindestens 15 Minuten mit Spielern laufen.
- Geben Sie
spark tpsein. Die MSPT (Median) sollte unter 50 ms liegen, ideal unter 35 ms, und die TPS bei 20. - Die Meldung
Can't keep up!sollte sich nicht mehr wiederholen. - Sind Sie unsicher, erstellen Sie ein weiteres zehnminütiges Profil und vergleichen Sie es mit dem vorherigen.
Fehlerbehebung#
Der Server startet nach einer Änderung der Konfiguration nicht#
Meist ist es ein YAML-Fehler (ein Tabulator, falsche Einrückung, ein doppelter Abschnitt). Suchen Sie in der Konsole eine Zeile mit dem Dateinamen und der Zeilennummer. Beheben Sie den Fehler oder löschen Sie die Datei – Paper legt sie beim Start mit Standardwerten neu an (Ihre Änderungen gehen verloren). Alternativ stellen Sie ein Backup wieder her.
Die Parameter sind nicht kompatibel, auf die vorherigen Einstellungen zurückgesetzt.#
Der Server ist mit den neuen Parametern nicht gestartet, und der Kundenbereich hat sie zurückgesetzt. Prüfen Sie Ihre eigenen Parameter (Tippfehler, ein Parameter für eine andere Java-Version) und probieren Sie das Preset ohne eigene Parameter.
Der Server beendet sich plötzlich ohne Fehler im Log#
Ein typisches Zeichen für ein überschrittenes Speicherlimit. Die Konsole zeigt die Zeilen Exit code: 137 und Out of memory: true, und der Kundenbereich zeigt über der Konsole Dem Server ging der Speicher aus und das System hat ihn beendet. Das Panel startet den Server noch einmal; stürzt er innerhalb einer Minute erneut ab, lässt es ihn aus.
- Prüfen Sie in der Registerkarte Startoptionen die Warnungen neben den Startparametern. Ist der Heap für Ihren Tarif zu groß oder hat der Befehl keine Speicherobergrenzen, klicken Sie auf Empfohlene verwenden.
- Einen von Hand bearbeiteten oder als eigenen festgelegten Startbefehl überschreibt der Kundenbereich nicht. Verwenden Sie das empfohlene Preset oder stellen Sie den Heap nach der Tabelle unter Warum der Heap nicht der ganze RAM ist ein.
- Suchen Sie im Log nach
OutOfMemoryError: Direct buffer memoryoderOutOfMemoryError: Metaspace. Sie weisen auf ein Plugin oder einen Mod hin, das die Netzwerkpuffer füllt oder immer wieder Klassen lädt. - Dauern die Abstürze auch mit den empfohlenen Einstellungen an, suchen Sie nach einem Speicherleck:
spark heapsummaryzeigt, was den Heap belegt, undspark profiler start --alloc --timeout 300zeigt, was am meisten Speicher anfordert. Fügen Sie den Link in den Analysator für spark-Profile ein oder senden Sie ihn unserem Support.
java.lang.OutOfMemoryError: Java heap space #
Der Heap ist voll. Entweder ist auf dem Server mehr, als in den Speicher passt (ein Modpack, viele Spieler), oder ein Plugin oder Mod „verliert“ Speicher (ein Speicherleck). Es hilft ein Upgrade oder das Finden des Lecks mit spark heapsummary. Weitere Fehler finden Sie unter Häufige Fehler auf Minecraft-Servern.
Chunky meldet eine ungültige Welt#
Der Name der Welt existiert nicht. Verwenden Sie im Spiel /chunky world ohne Namen (wählt die Welt, in der Sie stehen), oder geben Sie in der Konsole den Namen der Hauptwelt aus level-name ein (Standard world).
Nach dem Einschalten von ALTERNATE_CURRENT funktioniert eine Redstone-Schaltung nicht#
Manche Schaltungen verlassen sich auf die Reihenfolge der Aktualisierungen von Vanilla. Stellen Sie misc. wieder auf VANILLA und starten Sie den Server neu.
Zusammenfassung
- Messen Sie Lag mit
tps,msptundspark tps: Ziel sind 20 TPS und eine MSPT unter 50 ms. - Die größte Wirkung: Paper, eine vorgenerierte Welt mit Grenze (Chunky) und eine vernünftige
simulation-distance. - Heap und Speicherobergrenzen stellt der Kundenbereich anhand Ihres Tarifs selbst ein. Ändern Sie das Standard-Preset Empfohlen (G1) nur mit gutem Grund.
spark profiler start --timeout 600findet die Ursache von Lag; fügen Sie den Link in den Analysator für spark-Profile ein.- Einstellungen von Paper ändern Sie in
config/, nach einem Backup und mit Neustart.paper-world-defaults. yml
Weiterführende Links#
- Profiling in der Dokumentation von Paper (öffnet sich in einem neuen Fenster)
- Weltkonfiguration von Paper (öffnet sich in einem neuen Fenster)
- Konfiguration von spigot.yml (öffnet sich in einem neuen Fenster)
- Konfiguration von bukkit.yml (öffnet sich in einem neuen Fenster)
- Aikar's Flags in der Dokumentation von Paper (öffnet sich in einem neuen Fenster)
- Befehle von spark (öffnet sich in einem neuen Fenster)
- Befehle von Chunky (öffnet sich in einem neuen Fenster)