Minecraft Server Tick-Profiling: Lag finden und beheben mit Spark und Timings
# Minecraft Server Tick-Profiling: Lag finden und beheben mit Spark und Timings
Du hast deine server.properties angepasst, die View Distance reduziert und jeden Optimierungs-Plugin installiert, von dem du je gehört hast — trotzdem ruckelt dein Server. Das Problem: Die meisten Server-Admins optimieren *blind*. Ohne richtiges Profiling rätst du nur.
Dieser Guide zeigt dir, wie du mit Spark und Paper Timings genau herausfindest, was Lag auf deinem Minecraft-Server verursacht — und wie du es behebst.
---
Warum Profiling vor der Optimierung entscheidend ist
Jeder Minecraft-Server-Tick (idealerweise 50ms, also 20 TPS) umfasst hunderte von Operationen: Entity-KI, Chunk-Loading, Plugin-Event-Handler, Welt-Speicherung und mehr. Dauert ein Tick länger als 50ms, sinkt dein TPS-Wert.
Ohne Profiling könnte es passieren, dass du stundenlang Entity-Limits optimierst, obwohl das eigentliche Problem ein Plugin ist, das jede Tick eine schwere Datenbankabfrage ausführt. Profiling zeigt dir, wo deine Millisekunden tatsächlich hinführen.
---
Methode 1: Spark Profiler (Empfohlen)
[Spark](https://spark.lucko.me/) ist der Goldstandard für Minecraft-Server-Profiling. Es funktioniert auf Paper, Spigot, Purpur, Folia und sogar auf Velocity/BungeeCord-Proxys.
Spark installieren
Lade die neueste Spark-JAR von [spark.lucko.me](https://spark.lucko.me/) herunter und lege sie in deinen /plugins-Ordner. Starte den Server neu.
Ein Profil aufzeichnen
Während einer Lag-Phase oder bei hoher Spieleraktivität führe aus:
/spark profiler start
Lass es 60–120 Sekunden laufen, während der Lag auftritt, dann stoppe es:
/spark profiler stop
Spark erstellt einen teilbaren Link (z.B. https://spark.lucko.me/xxxxxxxxxx) mit einem interaktiven Flame-Graph.
Den Flame-Graph lesen
Der Flame-Graph zeigt dir einen Call-Stack-Überblick, wo CPU-Zeit verbraucht wird:
- Breite Balken = mehr Zeit in dieser Methode
- Suche nach breiten Balken oben im Stack — das sind deine Engpässe
- Häufige Übeltäter:
CraftScheduler(Plugin-Tasks),EntityAI,ChunkMap,LevelChunk
Beispiel-Befunde:
- Ein breiter
AsyncChatDecoratorEvent-Balken → ein Chat-Plugin verlangsamt die Nachrichtenverarbeitung - Starke
PathfinderGoal-Nutzung → zu viele Mobs mit komplexer KI gleichzeitig aktiv BlockPhysicsEvent-Spam → Plugin oder Kolben-Kette reagiert auf jedes Block-Update
Spark Health-Befehle
Spark enthält auch schnelle Diagnose-Befehle:
/spark health — Übersicht über TPS, CPU, Arbeitsspeicher
/spark gc — Garbage-Collection-Statistiken
/spark heapsummary — Speicher-Aufschlüsselung nach Objekttyp
/spark tps — TPS der letzten 5s/10s/1min
Diese sind unverzichtbar für schnelle Checks ohne ein volles Profil zu starten.
---
Methode 2: Paper Timings
Wenn du Paper (oder seine Forks) verwendest, hast du Zugriff auf das eingebaute Timings-System. Während Spark generell genauer ist, ist Timings für Anfänger einfacher zu interpretieren.
Timings ausführen
/timings reset — löscht vorhandene Daten
/timings report — generiert einen Bericht nach Datensammlung
Warte einige Minuten während aktiven Spielens, dann führe /timings report aus. Du erhältst einen Link zu [timings.aikar.co](https://timings.aikar.co).
Den Timings-Bericht lesen
Der Bericht ist in Abschnitte aufgeteilt:
- Plugin-Timings — zeigt, wie lange jedes Plugin pro Tick benötigt
- Entity-Timings — welche Entity-Typen die meiste Zeit beanspruchen
- World-Timings — Aufschlüsselung pro Welt
Achte auf:
- Jedes Plugin, das konsistent mehr als 1ms pro Tick benötigt — ein klares Warnsignal
- Hohe
Tile Entity Tick-Werte → zu viele Trichter, Öfen oder benutzerdefinierte Tile-Entities - Hohe
Entity Tick-Werte in einer bestimmten Welt → Mob-Überpopulation
> Hinweis: Paper bewegt sich von Timings weg, hin zu Spark. Auf neueren Paper-Versionen kann Timings veraltet sein. Spark ist immer die bessere Langzeit-Wahl.
---
Häufige Lag-Quellen und Lösungen
Sobald du den Verursacher identifiziert hast, hier die häufigsten Befunde und ihre Lösungen:
Plugin-Scheduler-Missbrauch
Wenn Spark starke CraftScheduler-Nutzung zeigt, führt ein Plugin teure Tasks im Haupt-Thread aus.
Lösung: Prüfe, welches Plugin unter dem Scheduler-Call gelistet ist. Suche nach Plugins, die jede paar Ticks synchrone Tasks ausführen. Kontaktiere den Entwickler oder ersetze das Plugin.
In bukkit.yml kannst du auch prüfen:
tick-per:
animal-spawns: 400
monster-spawns: 1
water-spawns: 1
autosave: 6000
Das Erhöhen von monster-spawns auf 2 oder 4 reduziert, wie oft Spawn-Checks durchgeführt werden.
Trichter-Lag
Trichter (Hoppers) sind eine der teuersten Tile-Entities. In paper-world.yml:
hopper:
cooldown-when-full: true
disable-move-event: true
ignore-occluding-blocks: true
Und in spigot.yml:
world-settings:
default:
hopper-amount: 1
hopper-can-load-chunks: false
Übermäßige Entity-KI
Wenn PathfinderGoal deinen Flame-Graph dominiert:
In paper-world.yml:
entity:
activation-range:
animals: 16
monsters: 24
misc: 8
brain-ticks:
villager: 2
In purpur.yml (bei Purpur):
mobs:
villager:
lobotomize:
enabled: true
check-interval: 100
Das Lobotomieren von feststeckenden oder inaktiven Dorfbewohnern spart enorm viel Tick-Zeit.
Welt-Speicher-Lag-Spikes
Wenn du periodische Lag-Spikes in Spark rund um save-all siehst, passe in bukkit.yml an:
chunk-gc:
period-in-ticks: 600
autosave-period: 6000
Und in server.properties:
sync-chunk-writes=false
Das verlagert Chunk-Schreiboperationen auf Paper-Servern aus dem Haupt-Thread.
---
Einen Profiling-Workflow aufbauen
Profile nicht einmal und vergiss es danach. Entwickle eine Routine:
- Während Stoßzeiten profilen — Lag ist abseits der Stoßzeiten schwerer zu reproduzieren
- Nach jedem großen Plugin-Update profilen — Updates können Performance-Regressionen einführen
- Eine Basislinie speichern — bewahre einen Spark-Bericht vom gesunden Server-Zustand zum Vergleich auf
- Vor und nach Änderungen profilen — verifiziere, dass deine Fixes tatsächlich geholfen haben
Tools wie [PulseNode](https://pulsenode.tech) helfen dir dabei, TPS-Einbrüche automatisch mit Server-Ereignissen zu korrelieren — sodass du genau weißt, *wann* du ein Spark-Profil starten solltest, ohne rund um die Uhr deine Konsole zu beobachten.
---
Zusammenfassung
| Tool | Am besten für | Plattform |
|------|--------------|----------|
| Spark | Tiefes CPU-Profiling, Flame-Graphs | Alle Plattformen |
| Paper Timings | Schnelle Plugin/Entity-Aufschlüsselung | Paper/Forks |
| /spark health | Schneller TPS/Speicher-Überblick | Alle Plattformen |
Profiling ist die effektivste einzelne Optimierungstechnik, weil sie Rätselraten eliminiert. Sobald du deinen tatsächlichen Engpass kennst, hat jede Konfigurations-Änderung eine messbare, gezielte Wirkung.
Hör auf, blind zu optimieren — erst profilen, dann beheben.
---
*Möchtest du sofort wissen, wenn dein Server beginnt zu laggen — bevor deine Spieler es bemerken? [PulseNode](https://pulsenode.tech) überwacht deine TPS, den Arbeitsspeicher und Entity-Zahlen in Echtzeit und benachrichtigt dich sofort, wenn etwas schiefläuft.*