Lag op je Minecraft server komt bijna altijd door één van drie dingen: de server zelf heeft te veel werk, de pc van een speler is te traag of de verbinding is slecht. In deze handleiding zoek je eerst uit waar de lag vandaan komt. Daarna maak je je server sneller: meten met spark, overstappen op Paper, de juiste afstanden instellen, je wereld vooraf genereren en mobs, farms en redstone in toom houden.
Ligt het aan de server, de pc of de verbinding?
- Serverlag: iedereen heeft er tegelijk last van. Blokken komen terug nadat je ze sloopt, mobs staan even stil en spelers springen terug (rubberbanding). De server haalt de 20 ticks per seconde niet meer.
- Lage FPS: het beeld hapert, maar de wereld reageert wel meteen. Dat zit op de pc van de speler. Daar kan de server niets aan doen.
- Hoge ping: alleen die ene speler merkt vertraging, bijvoorbeeld bij het openen van een kist. Kijk naar de ping in de spelerslijst (Tab). Op de Minecraft-pagina staat een pingtest naar onze node in Amsterdam.
Alleen de eerste soort los je op je server op. Daar gaat de rest van deze handleiding over.
Minecraft server lag meten: TPS en MSPT
Een Minecraft server rekent 20 keer per seconde de wereld door: 20 ticks per seconde (TPS). Elke tick mag dus hooguit 50 milliseconden duren. Hoe lang een tick echt duurt, heet MSPT (milliseconds per tick). Duren ticks langer dan 50 ms, dan zakt de TPS onder de 20 en merken spelers dat.
Sinds versie 1.21 zit de profiler spark standaard in Paper. Typ in de console (zonder /):
spark tps
spark health
spark tps toont de TPS, de MSPT en het CPU-gebruik. spark health geeft daarnaast het geheugen- en schijfgebruik. Draai je een oudere versie van Paper of Spigot, installeer spark dan zelf als plugin.
Zit je gemiddeld onder de 20 TPS, of vaak boven de 50 MSPT? Dan heeft je server echt te veel werk. Het oude timings is verouderd en verdwijnt uit Paper. Gebruik spark.
Vind de oorzaak met spark
Meten heeft pas zin als je ook ziet wat de tijd opslokt. Start een profiel terwijl de lag bezig is:
spark profiler start --timeout 600
Na tien minuten krijg je in de console een link naar het rapport. Open daarin de Server thread en volg de percentages: de regels met het hoogste percentage kosten de meeste tijd. Zie je de naam van een plugin, dan weet je waar je moet zoeken. Zie je vooral entities, chunks of hoppers, dan helpen de instellingen verderop.
Heb je af en toe een piek in plaats van constante lag? Zet dan spark tickmonitor --threshold-tick 50 aan. Elke tick die langer duurt dan 50 ms wordt dan gemeld. Met spark profiler start --only-ticks-over 100 neem je alleen die trage ticks op.
Stap over op Paper
Draait je server op Vanilla of Spigot? Stap dan over op Paper. Paper is gebaseerd op Spigot en bouwt voort op dezelfde plugin-API, dus de meeste Spigot-plugins werken er gewoon op. Paper is gemaakt om veel sneller te zijn en heeft instellingen die Vanilla niet heeft. Purpur is gebaseerd op Paper en heeft nog meer instellingen.
Overstappen doe je via Versions in het gamepaneel: zie Je Minecraft-versie of servertype wijzigen. Maak eerst een back-up en laat Wipe Server Files uit, dan blijft je wereld staan.
Bij een herinstallatie van een Paper-server zet het paneel onze eigen geoptimaliseerde bukkit.yml, spigot.yml, config/paper-global.yml en config/paper-world-defaults.yml neer. Eigen aanpassingen in die bestanden ben je dan kwijt, dus maak eerst een back-up.
view-distance en simulation-distance
Twee instellingen met veel effect staan in server.properties. Dat bestand open je via Files.
view-distancebepaalt hoeveel wereld de server naar elke speler stuurt, gemeten in chunks in elke richting. Standaard 10, toegestaan van 3 tot 32.simulation-distancebepaalt tot welke afstand van spelers de server mobs en andere entities bijwerkt. Alles daarbuiten staat stil. Ook standaard 10, van 3 tot 32.
simulation-distance bepaalt dus hoeveel de server elke tick moet doorrekenen. view-distance bepaalt vooral hoeveel chunks er geladen en verstuurd worden. Een praktisch startpunt voor een drukke server is view-distance=8 en simulation-distance=6. Blijft de MSPT hoog, ga dan lager. Herstart na elke wijziging.
Een lagere view-distance merken spelers die ver willen kijken. Een lagere simulation-distance merk je vooral bij farms: die draaien alleen als er een speler dichtbij genoeg is.
Genereer je wereld vooraf met Chunky
Nieuwe chunks maken is zwaar werk voor een server. Loopt een speler onbekend gebied in, dan moet de server die chunks ter plekke genereren. Met de plugin Chunky doe je dat vooraf, het liefst voordat spelers op je server komen.
- Installeer Chunky via Plugins in het gamepaneel, of upload het.jar-bestand zelf (zie Plugins installeren). Herstart daarna je server.
- Typ in de console
chunky radius 5000. Chunky genereert dan een vierkant tot 5000 blokken van het midden van je wereld (0,0). Standaard is de radius 500. - Typ
chunky start. De console laat de voortgang en de verwachte duur zien. - Met
chunky pausezet je het werk stil, bijvoorbeeld als spelers inloggen. Metchunky continuega je verder enchunky progresslaat zien hoe ver het is.
Een grote radius duurt lang en elke chunk komt op de schijf te staan. Kijk op de pagina Console hoeveel opslag je al gebruikt voordat je een grote radius kiest. Zet daarna een wereldgrens, zodat spelers niet buiten het gegenereerde gebied komen. Bij een radius van 5000 is dat worldborder set 10000: dat getal is de breedte van de grens, niet de radius.
Houd mobs, farms en redstone in toom
Zie je in het spark-rapport vooral entities? Kijk dan eerst wat er rondloopt. paper entity list toont alle entities die op dat moment bijgewerkt worden en paper mobcaps toont de mob-limieten van een wereld.
Paper regelt dit in config/paper-world-defaults.yml (de map config in Files). Deze instellingen maken verschil, met de naam zoals die in het bestand staat:
entities.spawning.per-player-mob-spawns: staat standaard optrue. De mob-limiet geldt dan per speler in plaats van voor de hele server. Laat dit aan.entities.spawning.spawn-limits: staat een waarde op-1, dan gebruikt Paper de limiet uitbukkit.yml(standaard 70 monsters en 10 dieren). Trekken mobfarms je server leeg, zetmonsterdan bijvoorbeeld op 50.misc.update-pathfinding-on-block-update: zet dit opfalseals je veel entities hebt en automatische farms of redstone-klokken draait. Volgens Paper kan dat de server flink sneller maken.misc.redstone-implementation:ALTERNATE_CURRENTkan de lag van redstone-stof sterk verminderen. Het verandert wel hoe redstone-stof werkt, dus sommige bouwwerken gedragen zich anders. Test het eerst op een kopie van je wereld.hopper.ignore-occluding-blocks: optruehoeven hoppers minder te controleren waar ze items in kunnen stoppen.
In spigot.yml staan onder world-settings.default nog drie nuttige instellingen: entity-activation-range (tot hoeveel blokken van een speler entities normaal bijgewerkt worden), merge-radius.item (binnen hoeveel blokken losse items samengevoegd worden) en mob-spawn-range (tot hoeveel chunks van een speler mobs kunnen spawnen). Verander één instelling per keer en meet opnieuw met spark tps.
Controleer je plugins
Een slechte plugin, of een goede plugin met een verkeerde instelling, kan in z'n eentje de TPS omlaag trekken.
- Typ
pluginsin de console en verwijder wat je niet gebruikt. - Zoek in het spark-rapport naar pluginnamen in de Server thread. Een plugin bovenaan de lijst werk je als eerste bij, stel je anders in of vervang je.
- Houd plugins up-to-date en controleer of ze jouw Minecraft-versie ondersteunen.
- Voeg nieuwe plugins één voor één toe. Dan zie je meteen welke de lag veroorzaakt.
Meer RAM is niet altijd de oplossing
Een lage TPS betekent dat de server per tick te veel rekenwerk heeft. Zolang er geheugen vrij is, lost meer RAM dat niet op. Kijk op de pagina Console naar het geheugengebruik. Volgens de documentatie van Paper gebruikt Java geheugen dat het niet nodig heeft ook niet.
Meer RAM helpt wel als het geheugen steeds tegen het maximum zit, als je OutOfMemoryError in de console ziet of als je een grote modpack draait. Hoeveel je per aantal spelers nodig hebt, lees je in Hoeveel RAM heeft je game server nodig?.
Java-flags hoef je niet zelf in te stellen. Het opstartcommando van een Paper-server in ons paneel bevat al G1-instellingen op basis van Aikar's flags, en het geheugen past zich automatisch aan je pakket aan. Eigen flags toevoegen kan niet, dus wat oudere handleidingen daarover zeggen, kun je overslaan. Kies wel de juiste Java-versie bij Docker Image onder Startup: zie Opstartinstellingen.
Plan een dagelijkse herstart
Een herstart op een rustig moment geeft je server een schone start, met leeg geheugen. Met Schedules regel je dat automatisch, met een waarschuwing aan spelers een minuut van tevoren. Kies een tijd waarop bijna niemand speelt, bijvoorbeeld 06:00.
Wanneer Budget niet meer genoeg is
Budget en Premium draaien op dezelfde AMD Ryzen 9 9950X-nodes. Minecraft doet het meeste werk op één thread, de Server thread uit spark. Daarvoor telt de snelheid per core, en die is bij beide gelijk. Het verschil zit in het aantal cores: Budget heeft 1 core tot en met 5GB en loopt op tot 6 cores, Premium begint met 4 cores en gaat tot 8.
Extra cores helpen bij het werk dat naast de Server thread gebeurt: chunks genereren en laden terwijl spelers de wereld verkennen, plugins die op de achtergrond werken en de garbage collector van Java. Zit het CPU-gebruik op de pagina Console bij drukte tegen het maximum, terwijl je instellingen al goed staan? Dan is Premium de volgende stap. Lees Minecraft Budget of Premium en vergelijk de pakketten op de Minecraft-pagina.
LagCore: onze lagdokter
LagCore is onze eigen lagdokter voor Minecraft servers en netwerken. Het is één plugin voor Paper 1.20+ en forks als Purpur en Folia, en hij verstuurt alleen metingen, nooit chat, commando's of IP-adressen. Bekijk de demo of vraag de add-on aan via het contactformulier. LagCore kost €10 per server per maand.
Veelgestelde vragen
Mijn server draait 20 TPS, maar spelers klagen over lag
Dan zit het probleem bij de speler: lage FPS op de pc of een hoge ping. Laat ze hun ping in de spelerslijst bekijken en de pingtest op onze Minecraft-pagina doen.
Welke view-distance en simulation-distance zijn goed?
Dat hangt af van je spelers en je pakket. Begin met 8 en 6, meet een dag met spark tps en pas het daarna aan.
Welke plugin veroorzaakt de lag?
Start spark profiler start --timeout 600 terwijl de lag bezig is. Zoek in het rapport de pluginnaam met het hoogste percentage in de Server thread.
Helpt een upgrade naar meer RAM?
Alleen als het geheugen in het paneel vol zit of als je OutOfMemoryError in de console ziet. Zit je CPU tegen het maximum, dan heb je meer aan extra cores (Premium) dan aan meer RAM.
Neem je contact op via support of Discord? Stuur dan de link van je spark-rapport mee.
