Een server die “hapert” heeft meestal geen tekort aan hardware, maar één concrete oorzaak: een te grote simulatieafstand, het genereren van nieuw terrein, een overvolle farm of een slecht geschreven plugin. We laten zien hoe je lag meet, de oorzaak vindt en die oplost, van snelle aanpassingen tot de instellingen van Paper en profileren.
Wat je nodig hebt
- Een Minecraft-server bij StormHost (we raden Paper of Purpur aan, een deel van de handleiding geldt ook voor Fabric en NeoForge)
- Toegang tot de tabbladen Console, Serverinstellingen, Opstarten en Bestanden
- Een back-up van de server voordat je de configuratie aanpast (handleiding)
- Ongeveer 40 minuten
Zo zie je wat er lagt#
Een Minecraft-server berekent het spel in ticks. Hij moet er 20 per seconde halen en heeft dus 50 milliseconden per tick. Twee getallen die je moet kennen:
| Waarde | Wat het betekent | Goed | Probleem |
|---|---|---|---|
| TPS (ticks per second) | Hoeveel ticks de server per seconde werkelijk haalt. | 20 | Onder 19 merken spelers vertraging, onder 15 is het spel onaangenaam. |
| MSPT (milliseconds per tick) | Hoeveel milliseconden één tick duurt. | Onder 50 ms, liefst onder 35 ms | Boven 50 ms houdt de server het niet bij en daalt de TPS. |
MSPT is de nauwkeurigere graadmeter: een server met een MSPT van 45 ms heeft nog steeds 20 TPS, maar geen enkele reserve. Zodra de MSPT boven 50 ms komt, begint de TPS te dalen.
De waarden vraag je op in de Console (commando's typ je zonder schuine streep):
tps
mspt
spark tpstps– de gemiddelde TPS over de laatste 1, 5 en 15 minuten (Paper, Purpur).mspt– de gemiddelde, kortste en langste ticktijd (Paper, Purpur).spark tps– TPS, MSPT (minimum, mediaan, 95e percentiel, maximum) en de belasting van de processor. Werkt overal waar spark aanwezig is (Paper heeft het ingebouwd).
Houdt de server het langere tijd niet bij, dan verschijnt in de console:
Can't keep up! Is the server overloaded? Running 2500ms or 50 ticks behindDe server zegt hiermee dat hij 2,5 seconden (50 ticks) achterloopt en die ticks overslaat. Eén melding bij het starten of bij het genereren van terrein is geen probleem. Komt de melding om de paar minuten terug, ga dan verder met deze handleiding.
Serverlag of iets anders?#
| Wat de speler ziet | Oorzaak | Waar je zoekt |
|---|---|---|
| Blokken komen terug nadat ze zijn afgebroken, mobs blijven hangen, alle spelers hebben hetzelfde probleem | Lag van de server (lage TPS) | Deze handleiding |
| Lage FPS, schokkerig beeld, maar bij andere spelers is alles in orde | De prestaties van de computer van de speler | De grafische instellingen in het spel, mods voor de client |
| De speler wordt “teruggeteleporteerd”, hoge ping alleen bij hem | De verbinding van de speler | De ping van de speler met het commando spark ping --player <NICK> |
| De server is in orde, maar nieuwe gebieden laden langzaam | Het genereren van terrein | Vooraf genereren met Chunky |
Snelle winst#
Gesorteerd van het grootste effect naar het kleinste. Het meeste regel je binnen tien minuten.
| Volgorde | Stap | Waarom het helpt | Waar |
|---|---|---|---|
| 1 | Gebruik Paper of Purpur in plaats van Vanilla | Paper bevat honderden optimalisaties en bugfixes die Vanilla niet heeft. | Het tabblad Software, zie Servertypes |
| 2 | Genereer de wereld vooraf en stel de wereldgrens in | Nieuw terrein genereren is de zwaarste bewerking van een server. | Chunky |
| 3 | Verlaag simulation-distance naar 6–8 en view-distance naar 8 | Minder chunks per speler = minder werk in elke tick. | View distance en simulation distance |
| 4 | Zoek de oorzaak met een profiler | Die wijst de concrete plugin, farm of entiteit aan. | spark |
| 5 | Beperk entiteiten en farms | Honderden dieren in één omheining of een overvolle farm maken de TPS kapot. | Instellingen van Paper |
| 6 | Laat de standaard opstartflags staan | De standaardpreset is afgestemd op de grootte van je geheugen. | Opstartflags |
| 7 | Werk de server, plugins en mods bij | Nieuwe versies verhelpen vaak geheugenlekken en trage stukken code. | De tabbladen Software en Plugins |
Plugins die “lag opruimen”
Plugins die een wonderbaarlijke versnelling beloven (regelmatig voorwerpen op de grond verwijderen, “RAM opschonen”, de garbage collector geforceerd aanroepen) lossen het probleem niet op. Ze verwijderen spullen van spelers, veroorzaken vaak haperingen en verbergen alleen de oorzaak. Zoek de echte oorzaak met spark.
Opstartflags en geheugen#
Flags zijn de parameters waarmee Java wordt gestart. Ze bepalen de grootte van het geheugen voor het spel (de heap), de bovengrenzen voor het geheugen buiten de heap en het gedrag van de garbage collector, die overbodige gegevens uit het geheugen opruimt. In je klantaccount vind je ze op het tabblad Opstarten, in het onderdeel Opstartparameters.
De heap en de bovengrenzen berekent je klantaccount zelf op basis van de grootte van het pakket, het servertype, de Java-versie en het aantal plugins of mods. Ze worden opnieuw berekend bij het aanmaken van de server, na een pakketwijziging, na een wijziging van het type of de versie en vóór een start vanuit het portaal, als een van die zaken sinds de vorige keer is veranderd. Een startcommando dat je handmatig in het panel hebt aangepast of als eigen commando hebt ingesteld, wordt niet overschreven. Heeft zo'n commando een grotere heap dan een kleiner pakket aankan, dan starten we de server na de pakketwijziging niet (hij zou meteen crashen) en sturen we je een e-mail.
| Optie | Wat het doet | Wanneer je het gebruikt |
|---|---|---|
| Preset – Aanbevolen (G1) | De garbage collector G1, ingesteld volgens de documentatie van Paper. De standaard voor alle servertypes. | De meeste servers. |
| Preset – Korte pauzes (ZGC) | Een garbage collector met zeer korte pauzes, ten koste van een hogere processorbelasting. Alleen Java 21 en nieuwer. | Grote servers vanaf 16 GB, als spark gc lange pauzes laat zien en de processor reserve heeft. |
| Preset – Proxy | Flags voor Velocity en BungeeCord. | Wordt alleen aangeboden bij proxyservers. |
| Preset – Zonder tuning | Alleen de heapgrootte en de bovengrenzen voor het geheugen. | Tijdelijk, als je zoekt of een fout door de flags komt. |
| Eigen parameters | Aanvullende parameters. Toegestaan zijn alleen -XX:…, -D…=… en --add-modules=…, hooguit 30. De heap kun je niet instellen. De bovengrens voor netwerkbuffers (-XX:MaxDirectMemorySize), gecompileerde code (-XX:) en geladen klassen (-XX:MaxMetaspaceSize) wel, de heap wordt dan opnieuw berekend. | Als de handleiding van een plugin of mod om een bepaalde -D-eigenschap vraagt, of als een plugin voor voicechat meer netwerkbuffers nodig heeft. |
Alle presets hebben dezelfde beveiligingen: een bovengrens voor netwerkbuffers, gecompileerde code en geladen klassen, MALLOC_ARENA_MAX=2 (minder geheugenarena's van de allocator) en vanaf Java 17 -XX: (geeft ongebruikt geheugen terug aan het systeem). Purpur krijgt daarnaast automatisch --add-modules= (snellere berekeningen waar Purpur gebruik van kan maken).
De knoppen in dit onderdeel:
- Opslaan – de instellingen worden bij de volgende start gebruikt.
- Opslaan en herstarten – de server herstart meteen. Start hij niet met de nieuwe flags, dan zet je klantaccount ze zelf terug en zie je de melding
De parameters zijn niet compatibel, teruggezet naar de vorige instellingen. - Vorige terugzetten – zet de laatste werkende instellingen terug.
- Aanbevolen gebruiken – verschijnt als de heap te groot is voor het pakket of als het startcommando geen bovengrenzen voor het geheugen heeft. Stelt het aanbevolen commando in.
- Nu opnieuw berekenen – berekent de flags meteen opnieuw, je hoeft niet te wachten op de volgende start vanuit het portaal.
Onder de optie Geheugenverdeling zie je hoeveel de heap krijgt en hoeveel er overblijft voor de andere onderdelen. Na een automatische herberekening toont je klantaccount bijvoorbeeld We hebben het startcommando aangepast aan de nieuwe RAM-grootte: heap 8,2 → 9,6 GB.
Een server buiten StormHost? Een startscript met dezelfde berekening voor Docker, Linux en Windows maakt de Startscript-generator voor je.
Waarom de heap niet het hele RAM is#
De heap (-Xmx) groeit nooit boven zijn eigen grens uit. Wat groeit is het geheugen buiten de heap: netwerkbuffers, geladen klassen van plugins en mods, gecompileerde code, threads en de allocator van het systeem. Het meest de netwerkbuffers: zonder bovengrens mogen die groeien tot de grootte van de heap, waardoor een server met een heap van 6 GB op 12 GB kan uitkomen.
De container van de server heeft een harde limiet die 5% hoger ligt dan het pakket (bij pakketten tot 4 GB 10%, tot 2 GB 15%) en heeft geen swap. Gaat het proces over de limiet, dan beëindigt het systeem het. In de Console verschijnt Out of memory: true, in het log van de server staat geen enkele fout.
Daarom heeft elk groot onderdeel buiten de heap een bovengrens, wordt alles met een reserve opgeteld tot onder de grootte van het pakket en krijgt de heap de rest. Loopt een onderdeel tegen zijn bovengrens aan, dan schrijft de server een fout naar het log (OutOfMemoryError: Direct buffer memory of Metaspace) in plaats van stil te crashen, en aan die fout zie je wie de schuldige is.
| Geheugen van het pakket | Heap (Paper, 20 plugins) | Heap (modpack, 200 mods) | Limiet van de container |
|---|---|---|---|
| 10 GB | 7.872 MB | 7.040 MB | 10.752 MB |
| 12 GB | 9.792 MB | 8.896 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 |
De heap heeft dezelfde minimale en maximale grootte (-Xms = -Xmx) en wordt meteen bij het starten ingenomen. De geheugengrafiek in het panel toont daarom vanaf het begin een hoog getal. Het panel telt bovendien de bestandscache van de wereld mee, die het systeem vrijgeeft als dat nodig is. Een getal dicht bij de limiet betekent op zichzelf geen crash.
De documentatie van Paper raadt voor een server minstens 6–10 GB heap aan, ongeacht het aantal spelers, en waarschuwt dat meer geheugen boven een bepaalde grens de prestaties niet verbetert.
Wanneer het tijd is voor een groter pakket
Laat spark health zien dat de heap ook na het opruimen blijvend boven 90% zit (spark gc meldt frequente en lange pauzes) en heb je geheugenlekken in plugins uitgesloten, dan heeft de server meer geheugen nodig. Een groter pakket stel je in op het tabblad Pakket wijzigen (handleiding). De flags worden na de upgrade vanzelf opnieuw berekend en gelden vanaf de volgende start.
View distance en simulation distance#
De wereld is verdeeld in chunks (kolommen van 16 × 16 blokken). De server houdt rond elke speler de chunks binnen een bepaalde straal geladen:
view-distance– hoeveel chunks rond de speler de server naar het spel stuurt (wat de speler ziet). Heeft vooral invloed op het geheugen en het netwerk.simulation-distance– binnen welke straal chunks “leven”: mobs bewegen, gewassen groeien, redstone en farms werken. Heeft vooral invloed op de processor, en dus op de TPS.
Het aantal chunks groeit met het kwadraat van de afstand. Bij view-distance=10 houdt de server rond elke speler 441 chunks geladen, bij 8 maar 289 (een derde minder). Bij de simulatie is het effect hetzelfde.
| Situatie | view-distance | simulation-distance |
|---|---|---|
| Een kleine server met vrienden, zonder lag | 10 | 10 |
| Een openbare survival, 20+ spelers | 8–10 | 6–8 |
| De server lagt en je weet niet waarom | 8 | 6 |
| Minigames, lobby | 6–8 | 4–6 |
Je stelt ze in op het tabblad Serverinstellingen in de groep Wereld (alle instellingen). Een simulatieafstand onder 5 raden we af: grotere farms werken dan niet meer, omdat een deel van de farm buiten het gesimuleerde gebied valt.
Paper en afzonderlijke werelden
Op Paper kun je de afstanden ook per wereld instellen in het bestand spigot.yml (world-settings › default › view-distance en simulation-distance). De waarde default betekent “gebruik server.properties”.
Instellingen van Paper#
Paper en Purpur hebben hun eigen configuratie in de map config:
| Bestand | Wat erin staat |
|---|---|
config/paper-global.yml | Instellingen voor de hele server (proxy, het laden van chunks, spamlimieten). |
config/ | Standaardinstellingen voor alle werelden. Hier stel je de prestaties af. |
world/ | Uitzonderingen voor één dimensie (vanaf versie 26.1, <dimensie> is overworld, the_nether of the_end). In oudere versies het bestand paper-world.yml in de map van de wereld, bijvoorbeeld world_. |
Pas altijd paper-world-defaults.yml aan. Open het bestand op het tabblad Bestanden in de editor, zoek de bestaande sectie (bijvoorbeeld chunks:) en wijzig de waarde daarin. Voeg dezelfde sectie niet een tweede keer toe: bij een dubbele sleutel weigert de server het bestand te laden, of hij gebruikt er maar één en jouw wijziging heeft geen effect.
De regels van YAML
Spring alleen in met spaties (nooit met tabs), gebruik dezelfde inspringing op hetzelfde niveau en zet een spatie na de dubbele punt. Maak een back-up voordat je iets aanpast. Herstart de server na de aanpassing. Het commando paper reload raden we af, omdat sommige waarden alleen bij het starten worden geladen.
Een selectie van instellingen met de grootste invloed op de prestaties:
| Instelling | Wat het doet | Aanbevolen waarde | Wanneer wijzigen |
|---|---|---|---|
chunks. | Laat spelers niet in een chunk die nog niet is geladen (snel vliegen met een elytra, rijden in een mijnkar). De server hoeft chunks dan niet midden in een tick geforceerd te laden. | true | Standaard false. Zet het aan op servers met elytra's en snel reizen. |
chunks. | Hoeveel entiteiten van een bepaald type in één chunk worden opgeslagen. Beschermt tegen chunks die vol zitten met duizenden pijlen of ervaringsbollen. | arrow: 16, experience_orb: 16, snowball: 8, ender_pearl: 8, fireball: 8, small_fireball: 8 | Standaard zonder limiet (-1). Zet hier geen dieren of mobs in, want de rest zou bij het opslaan verdwijnen. |
collisions. | Na hoeveel botsingen een entiteit stopt met het berekenen van verdere botsingen. | 2 | Standaard 8. Een lagere waarde ontlast plekken waar veel mobs op elkaar gepakt staan flink. Mobs in een menigte duwen elkaar dan minder weg. Werkt een farm daardoor niet meer, zet de waarde dan weer hoger. |
environment. | Versnelt de berekening van explosies (TNT, creepers). | true | Standaard false. Zet het altijd aan, het resultaat van een explosie verandert niet. |
misc. | De manier waarop redstone wordt berekend: VANILLA, EIGENCRAFT, ALTERNATE_CURRENT. | ALTERNATE_CURRENT | Standaard VANILLA. De alternatieve berekening maakt redstonestof veel lichter, maar verandert in een klein aantal gevallen het gedrag van schakelingen die afhangen van de volgorde van updates. Laat het spelers met technische bouwwerken weten. |
hopper. | Schakelt de gebeurtenis voor plugins uit bij elke verplaatsing van een voorwerp door een hopper. | false | true alleen als geen enkele plugin de verplaatsingen van hoppers bewaakt (kistbeveiliging, filters). Anders zouden beveiligingen niet meer werken. |
tick-rates.mob-spawner | Hoe vaak (in ticks) mobspawners hun omgeving controleren en spawnen. | 2 | Standaard 1. De spawner wordt alleen om de andere tick gecontroleerd. Paper telt zijn wachttijd daarbij sneller af, zodat hij ongeveer even vaak mobs spawnt. -1 schakelt alle spawners uit. |
tick-rates.grass-spread | Hoe vaak (in ticks) de server probeert gras te verspreiden. | 4 | Standaard 1. Gras verspreidt zich langzamer, spelers merken dat meestal niet. |
entities. | De afstand tot de speler waarop mobs willekeurig (soft) of onmiddellijk (hard) verdwijnen. Vanilla: 32 en 128 blokken. | Bijvoorbeeld monster: soft: 30, hard: 72 | Op overvolle servers. Een kleinere hard maakt ruimte vrij voor nieuwe mobs dichter bij de spelers. |
environment. | Schatkaarten van dorpelingen en uit kisten. Het zoeken naar het dichtstbijzijnde bouwwerk is erg zwaar. | true | false als spark lag laat zien bij het handelen met cartografen of het openen van kisten. |
entities. | Of harnasstandaards ticken (fysica, zwaartekracht). | true | false op servers met duizenden decoratieve standaards. De standaards vallen dan niet en sommige plugins werken er mogelijk niet mee. |
Een voorbeeld van hoe de aanpassingen in het bestand eruitzien (alleen de gewijzigde delen, laat de overige regels van het bestand staan):
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 en bukkit.yml#
Paper leest ook de oudere configuratiebestanden spigot.yml en bukkit.yml in de hoofdmap van de server.
spigot.yml#
Alle instellingen staan in de sectie world-settings › default.
| Instelling | Wat het doet | Aanbevolen waarde | Wanneer wijzigen |
|---|---|---|---|
entity-activation-range. | Binnen welke afstand (blokken) van een speler dieren volledig ticken. Verder weg ticken ze alleen af en toe. | 16–24 | Standaard 32. Verlaag dit op servers met grote dierenweides. |
entity-activation-range. | Hetzelfde voor monsters. | 24 | Standaard 32. |
entity-activation-range. | Hetzelfde voor dorpelingen. | 16 | Standaard 32. Dorpelingen horen bij de zwaarste entiteiten. Een te lage waarde vertraagt hun farms. |
entity-activation-range. | Overige entiteiten (voorwerpen op de grond, mijnkarren). | 8–12 | Standaard 16. |
entity-activation-range. | Overvallers. | 48 | Standaard 64. Een te lage waarde maakt overvallen (raids) kapot. |
merge-radius.item | Tot welke afstand (blokken) dezelfde voorwerpen op de grond worden samengevoegd. | 2.5 | Standaard 0.5. Een grotere waarde = minder entiteiten op de grond. |
merge-radius.exp | Hetzelfde voor ervaringsbollen. -1 = het gedrag van Vanilla. | 3.0 | Standaard -1. |
nerf-spawner-mobs | Mobs uit een spawner hebben geen kunstmatige intelligentie (ze lopen niet en vallen niet aan). | true | Standaard false. Bespaart rekenkracht bij XP-farms, maar mobs uit een spawner vallen dan niet aan. Laat het de spelers weten. |
ticks-per. | Na hoeveel ticks een hopper een voorwerp verplaatst. | 8 | De standaard is 8 (Vanilla). Een hogere waarde vertraagt alle hoppers en verandert het gedrag van redstoneklokken. |
bukkit.yml#
| Instelling | Wat het doet | Aanbevolen waarde | Wanneer wijzigen |
|---|---|---|---|
spawn-limits.monsters | Het maximale aantal monsters (per speler, als in Paper per-player-mob-spawns aan staat). | 50 | Standaard 70. Minder monsters = minder berekeningen. |
spawn-limits.animals | Het maximale aantal dieren dat vanzelf verschijnt. | 8 | Standaard 10. |
spawn-limits., water-ambient, ambient | Vissen, inktvissen, vleermuizen. | 3, 10, 5 | Standaard 5, 20, 15. |
ticks-per.monster-spawns | Na hoeveel ticks de server probeert monsters te spawnen. | 2 | Standaard 1. |
ticks-per.autosave | Na hoeveel ticks de hele wereld wordt opgeslagen (6.000 = 5 minuten). | 6000 | Niet wijzigen. Paper slaat chunks doorlopend op. |
De wereld vooraf genereren met Chunky#
Komt een speler op een plek waar nog niemand is geweest, dan moet de server het terrein genereren. Dat is de zwaarste bewerking die er is: één speler met een elytra kan de TPS van de hele server omlaag halen. De oplossing is het terrein vooraf te genereren en de wereldgrens zo in te stellen dat spelers niet buiten het voorbereide gebied kunnen komen.
De plugin Chunky genereert terrein op de achtergrond, stap voor stap en met de mogelijkheid om te onderbreken. Hij bestaat voor Paper, Purpur en Folia en ook als mod voor Fabric, Forge en NeoForge.
Installeer Chunky op het tabblad Plugins (bij mods Mods) › Bladeren, zoek op
Chunkyen klik op Installeren. Herstart daarna de server (handleiding voor plugins).Stel in de Console het midden van de wereldgrens in:
text worldborder center 0 0worldborder center– stelt het midden van de wereldgrens in.0 0– de coördinaten X en Z van het midden. Meestal het midden van de wereld, eventueel de coördinaten van de spawn.
Stel de grootte van de grens in:
text worldborder set 10000worldborder set– stelt de grootte van de grens in.10000– de diameter in blokken. De wereld wordt 10.000 × 10.000 blokken, dus 5.000 blokken vanaf het midden in elke richting.
Neem de grens over in Chunky:
text chunky worldborderChunky stelt zijn midden en straal in op basis van de wereldgrens.
Start het genereren:
text chunky startIn de console zie je regelmatig de voortgang in procenten, het aantal gegenereerde chunks en een schatting van de resterende tijd.
Andere commando's:
| Commando | Wat het doet |
|---|---|
chunky pause | Pauzeert het genereren en slaat de voortgang op. Handig als er veel spelers verbinden. |
chunky continue | Gaat verder met het gepauzeerde genereren. |
chunky cancel | Annuleert de taak. De gegenereerde chunks blijven staan. |
chunky progress | Toont de voortgang (handig in het spel). |
chunky silent | Zet de voortgangsmeldingen in de console uit of aan. |
chunky start world square 0 0 5000 | Start het genereren zonder wereldgrens: de wereld world, vierkante vorm, midden 0 0, straal 5.000 blokken. |
chunky world | Kiest een wereld. In het spel kiest het zonder naam de wereld waarin je staat. |
Nether en End#
De Nether is acht keer kleiner dan de Overworld (1 blok in de Nether = 8 blokken in de Overworld). Voor een grens met een diameter van 10.000 blokken in de Overworld (straal 5.000) is in de Nether een straal van 625 blokken genoeg. Verbind met het spel, ga naar de Nether en typ in de chat:
/chunky world
/chunky center 0 0
/chunky radius 625
/chunky start/chunky world– kiest zonder naam de wereld waarin je je nu bevindt (de Nether)./chunky center 0 0– het midden van het genereren./chunky radius 625– de straal in blokken./chunky start– start het genereren.
Stel de wereldgrens in de Nether (/worldborder set 1250, ingevoerd in de Nether) alleen in op Paper en Purpur en vanaf versie 1.21.9 ook elders. Pas vanaf die versie heeft elke dimensie een eigen grens. In oudere versies van Vanilla, Fabric en NeoForge zou het commando ook de grens in de Overworld veranderen.
De End kun je kleiner genereren (bijvoorbeeld een straal van 2.000–3.000 blokken), spelers bewegen daar vooral rond de eilanden.
Schijf en processor
Een vooraf gegenereerde wereld neemt schijfruimte in: hoe groter de grens, hoe meer. Begin met een kleinere diameter (5.000–10.000 blokken) en houd de vrije ruimte in de gaten op het tabblad Bestanden of in de schijfindicator in de Console. Het genereren belast de processor volledig: start het als er weinig spelers op de server zijn, of pauzeer het tussendoor met het commando chunky pause.
Na een herstart van de server gaat het genereren niet vanzelf verder. Pak het weer op met het commando chunky continue (of stel in plugins/ continue-on-restart: true in).
Diagnose met spark#
spark is een profiler: terwijl de server draait, legt hij vast wat de server doet en hij toont het resultaat als een overzichtelijke boom met percentages. Paper heeft hem vanaf versie 1.21 ingebouwd (Purpur ook), op Fabric en NeoForge installeer je de mod spark van Modrinth. Op een Velocity-proxy heet het commando sparkv.
Snel overzicht#
| Commando (in de console) | Wat het laat zien |
|---|---|
spark tps | De TPS over de laatste 5 s, 10 s, 1 min, 5 min en 15 min, de ticktijden en de belasting van de processor. De waarden kleuren groen, oranje of rood, afhankelijk van hoe goed ze zijn. |
spark health | Een link naar een live overzicht: TPS, MSPT, processor, geheugen, schijf. Wordt elke 10 seconden bijgewerkt. |
spark gc | De geschiedenis van de garbage collector: hoe vaak en hoe lang hij het geheugen heeft opgeruimd. |
spark ping | De gemiddelde ping van de spelers. Met --player <NICK> de ping van één speler. |
spark tickmonitor --threshold-tick 50 | Bewaakt ticks die langer duren dan 50 ms en toont elk daarvan. Voer spark tickmonitor nog een keer in om het bewaken uit te zetten. |
Profileren stap voor stap#
Wacht tot de server lagt (of tot er een normaal aantal spelers op zit). Een profiel van een lege server laat niets zien.
Start in de Console de profiler voor 10 minuten:
text spark profiler start --timeout 600spark profiler start– start de profiler.--timeout 600– na 600 seconden (10 minuten) stopt hij vanzelf en uploadt hij het resultaat.
Wacht 10 minuten. In de console verschijnt een link naar het profiel (
spark.lucko.me/…).Plak de link in de Analyse van een Spark-profiel. Die laat zien wat de server vertraagt en wat je moet veranderen.
Je hoeft het profiel niet te uploaden: met de optie --save-to-file (bijvoorbeeld spark profiler start --timeout 600 --save-to-file) slaat spark het op als een .sparkprofile-bestand in de map plugins/spark (op Fabric en NeoForge config/spark). Download het op het tabblad Bestanden en upload het naar de analyse.
Wil je de profiler eerder stoppen, voer dan spark profiler stop in. Voor korte uitschieters (de server “bevriest” af en toe een seconde) gebruik je:
spark profiler start --only-ticks-over 100--only-ticks-over 100– legt alleen ticks vast die langer duren dan 100 ms. Het filtert het normale gebruik weg, zodat alleen de “laggy” ticks overblijven. Kies een waarde tussen 50 en 100.
Het resultaat lezen#
Wil je zelf door de boom lopen, open dan de link naar het profiel in je browser:
- Klap in de lijst met threads Server thread uit, de hoofdthread van het spel. Problemen in andere threads (het laden van chunks, het netwerk) komen minder vaak voor.
- Klap de knooppunten uit door erop te klikken en let op de percentages. Volg altijd het pad met het hoogste aandeel.
- Tijd die in
Thread.sleep()of “parked” wordt doorgebracht is in orde: de server wacht op de volgende tick, omdat hij reserve heeft. - Typische bevindingen:
| In het profiel zie je | Wat het betekent | Wat je doet |
|---|---|---|
Een groot aandeel bij tickEntities of bij entiteiten (Villager, Zombie …) | Te veel entiteiten. | entity-activation-range, de spawnlimieten, de farms bekijken (zie Hoeveel entiteiten er op de server zijn). |
| Een groot aandeel bij het genereren van chunks | Spelers ontdekken nieuw terrein. | Chunky en een wereldgrens. |
De pakketnaam van een plugin (bijvoorbeeld com.example.plugin) | Een concrete plugin. | Bijwerken, instellen of vervangen. |
| Redstone, hoppers | Technische bouwwerken. | redstone-implementation, hopper. (voorzichtig). |
- Schakel in de bovenste balk de weergave om naar Sources. Die toont een aparte boom voor elke plugin of mod, zodat je meteen ziet welke het zwaarst belast.
De link naar het profiel kun je naar de maker van de plugin sturen of naar onze support. Hij bevat geen wachtwoorden of serverbestanden.
Hoeveel entiteiten er op de server zijn#
Op Paper toont het commando paper entity list de aantallen entiteiten per type. In de console moet je ook de wereld opgeven:
paper entity list * minecraft:overworld
paper entity list minecraft:villager minecraft:overworldpaper entity list– het overzicht van entiteiten.*– zonder filter, toont alle typen entiteiten met hun aantallen (het eerste getal zijn tickende entiteiten, het tweede niet-tickende).minecraft:villager– een filter op één type. Het overzicht toont dan de coördinaten van de chunks waarin de meeste van deze entiteiten zitten.minecraft:overworld– de wereld (minecraft:the_nether,minecraft:the_endvoor de andere dimensies). In het spel hoef je de wereld niet op te geven, dan wordt de wereld gebruikt waarin je staat.
Bekijk de gevonden plek daarna in het spel en maak de farm of de omheining kleiner.
Mods voor prestaties (Fabric en NeoForge)#
Fabric en NeoForge hebben de optimalisaties van Paper niet, maar er bestaan servermods met hetzelfde doel. Je vindt ze allemaal op Modrinth (op het tabblad Mods › Bladeren):
| Mod | Wat het doet | Loader |
|---|---|---|
| Lithium | Optimaliseert de fysica, de kunstmatige intelligentie van mobs en andere delen van het spel zonder het gedrag te veranderen. | Fabric, NeoForge |
| FerriteCore | Verlaagt het geheugengebruik. | Fabric, Forge, NeoForge |
| ModernFix | Versnelt het starten en verlaagt het geheugengebruik, vooral bij grote modpacks. | Fabric, Forge, NeoForge |
| C2ME | Parallel genereren en laden van chunks. Grijpt diep in op de omgang met de wereld, maak dus een back-up voordat je hem inzet. | Fabric |
| spark | De profiler die hierboven is beschreven. | Fabric, Forge, NeoForge |
| Chunky | De wereld vooraf genereren. | Fabric, Forge, NeoForge |
Kies een mod altijd voor de exacte versie van Minecraft en van de loader. Meer in de handleiding Mods en modpacks.
Wanneer het tijd is voor een upgrade#
Een upgrade van het pakket is zinvol als:
- spark laat zien dat de server gelijkmatig belast is (geen enkele plugin of farm overheerst) en de MSPT bij een normaal aantal spelers blijvend boven 40 ms ligt,
spark healthlaat zien dat het geheugen blijvend tegen de bovengrens zit en de garbage collector het opruimen niet bijhoudt,- je een groot modpack toevoegt of rekent op duidelijk meer spelers.
Neemt één plugin of farm het grootste deel van de tijd in beslag, dan lost meer rekenkracht het probleem niet op. De oorzaak moet dan worden weggenomen.
Controle#
- Herstart de server na de wijzigingen en laat hem minstens 15 minuten met spelers draaien.
- Voer
spark tpsin. De MSPT (mediaan) moet onder 50 ms liggen, liefst onder 35 ms, en de TPS moet 20 zijn. - De melding
Can't keep up!mag niet meer terugkomen. - Twijfel je, start dan opnieuw een profiel van 10 minuten en vergelijk het met het vorige.
Als iets niet werkt#
De server start niet meer na een wijziging in de configuratie#
Meestal zit er een fout in de YAML (een tab, een verkeerde inspringing, een dubbele sectie). Zoek in de console naar een regel met de bestandsnaam en het regelnummer. Herstel de fout, of verwijder het bestand: Paper maakt het bij het starten opnieuw aan met de standaardwaarden (je aanpassingen gaan daarbij verloren). Je kunt ook een back-up herstellen.
De parameters zijn niet compatibel, teruggezet naar de vorige instellingen.#
De server is met de nieuwe flags niet gestart en je klantaccount heeft ze teruggezet. Controleer je eigen flags (een typfout, een flag voor een andere Java-versie) en probeer de preset zonder eigen flags.
De server gaat plotseling uit zonder fout in het log#
Een typisch teken dat de geheugenlimiet is overschreden. In de Console staan de regels Exit code: 137 en Out of memory: true en je klantaccount toont boven de console De server had geen geheugen meer en het systeem heeft hem beëindigd. Het panel start de server één keer opnieuw. Crasht hij binnen een minuut voor de tweede keer, dan blijft hij uit.
- Controleer op het tabblad Opstarten de waarschuwing bij de opstartflags. Is de heap te groot voor het pakket of heeft het commando geen bovengrenzen voor het geheugen, klik dan op Aanbevolen gebruiken.
- Een handmatig aangepast of eigen startcommando overschrijft je klantaccount niet. Gebruik de aanbevolen preset, of stel de heap in volgens de tabel in het onderdeel Waarom de heap niet het hele RAM is.
- Zoek in het log naar
OutOfMemoryError: Direct buffer memoryofOutOfMemoryError: Metaspace. Die wijzen op een plugin of mod die de netwerkbuffers vult of steeds opnieuw klassen laadt. - Gaan de crashes ook met de aanbevolen instellingen door, zoek dan naar een geheugenlek:
spark heapsummarylaat zien wat de heap inneemt,spark profiler start --alloc --timeout 300wat het meeste geheugen toewijst. Plak de link in de Analyse van een Spark-profiel, of stuur hem naar onze support.
java.lang.OutOfMemoryError: Java heap space #
De heap is vol. Of er staat meer op de server dan in het geheugen past (een modpack, een groot aantal spelers), of een plugin of mod “verliest” geheugen (een geheugenlek). Een upgrade helpt, of het lek opsporen met spark heapsummary. Meer fouten vind je in het artikel Veelvoorkomende fouten van een Minecraft-server.
Chunky meldt een ongeldige wereld#
De naam van de wereld bestaat niet. Gebruik in het spel /chunky world zonder naam (dat kiest de wereld waarin je staat), of voer in de console de naam van de hoofdwereld in volgens level-name (standaard world).
Na het inschakelen van ALTERNATE_CURRENT werkt een redstonebouwwerk niet meer#
Sommige schakelingen vertrouwen op de volgorde van updates van Vanilla. Zet misc. terug op VANILLA en herstart de server.
Samenvatting
- Meet lag met de commando's
tps,msptenspark tps: het doel is 20 TPS en een MSPT onder 50 ms. - Het grootste effect: Paper, een vooraf gegenereerde wereld met een grens (Chunky) en een verstandige
simulation-distance. - De heap en de bovengrenzen voor het geheugen stelt je klantaccount zelf in op basis van het pakket. Wijzig de standaardpreset Aanbevolen (G1) alleen als je er een reden voor hebt.
- De oorzaak van lag vind je met
spark profiler start --timeout 600, plak de link in de Analyse van een Spark-profiel. - Wijzig de instellingen van Paper in
config/, na een back-up en met een herstart.paper-world-defaults. yml
Meer bronnen#
- Profileren in de documentatie van Paper (opent in een nieuw venster)
- Configuratie van werelden in Paper (opent in een nieuw venster)
- Configuratie van spigot.yml (opent in een nieuw venster)
- Configuratie van bukkit.yml (opent in een nieuw venster)
- De flags van Aikar in de documentatie van Paper (opent in een nieuw venster)
- Commando's van spark (opent in een nieuw venster)
- Commando's van Chunky (opent in een nieuw venster)