spark: uitzoeken waar de lag op je Minecraft-server vandaan komt
spark is de standaardprofiler voor Minecraft-servers: hij meet welke code, welke mod of welke chunk je tick-tijd opeet, zodat je niet hoeft te gokken. Een server draait 20 ticks per seconde, dus elke tick heeft 50 milliseconden. Duurt een tick structureel langer, dan zakt je TPS en voelt alles stroperig. Met /spark profiler, /spark tps en /spark heapsummary heb je meestal binnen vijf minuten een concrete verdachte.
Wat doet een profiler precies?
Een profiler kijkt vele malen per seconde naar wat de hoofdthread van je server doet, en noteert de volledige aanroepketen: van de hoofdlus, via het onderdeel dat aan de beurt is, tot de precieze methode in een plugin of mod. Duizenden van die momentopnames samen laten zien waar de tijd heen gaat. Dat heet sampling, en het is meteen de reden dat spark je server nauwelijks belast.
Het verschil met gokken is groot. "Die plugin voelt zwaar" is een gevoel; "een derde van de tick-tijd zit in het pathfinden van mobs op één plek" is een meting. Oplossen doet spark niet, hij wijst alleen aan waar het zit.
Hoe installeer je spark op je server?
spark bestaat als plugin voor Bukkit, Spigot, Paper en Purpur, als mod voor Fabric, Forge en NeoForge, en als build voor proxies zoals BungeeCord en Velocity. Pak wel de juiste variant: een pluginbestand doet niets in een mods-map.
- Typ eerst
/spark tpsin de console; sommige serversoftware levert spark al mee. - Download anders de juiste build: de plugin hoort in
plugins/, de mod inmods/. - Upload het via de bestandsbeheerder van je paneel of via SFTP. In een Pterodactyl-paneel sleep je het er rechtstreeks in.
- Herstart de server helemaal. Gebruik geen
/reload, dat geeft op Paper vaker problemen dan het oplost. - Geef jezelf rechten met LuckPerms:
/lp user JouwNaam permission set spark true. Zonder permissie werkt alleen de console.
spark is gratis en open source en staat niet voor niets in elk overzicht van kernplugins naast EssentialsX, LuckPerms en CoreProtect.
Wat vertellen /spark tps en /spark health je?
/spark tps geeft je TPS over de laatste 5 en 10 seconden en over 1, 5 en 15 minuten, plus de MSPT: hoeveel milliseconden een tick echt kost. MSPT is het eerlijkere getal, want TPS blijft op 20 zolang de server het net bijhoudt. 20 TPS bij 45 ms is iets anders dan 20 TPS bij 12 ms: de eerste valt om zodra er tien spelers bij komen.
Je krijgt bij MSPT ook een mediaan en hogere percentielen. /spark health vult dat aan met CPU-gebruik, geheugengebruik, de tijd in garbage collection en de vrije schijfruimte.
| Meting | Richtlijn | Wat je ermee doet |
|---|---|---|
| MSPT onder 30 ms | Ruimte over | Niets, je kunt groeien |
| MSPT 30 tot 50 ms | Krap | Profiler draaien voordat het misgaat |
| MSPT boven 50 ms | TPS zakt onder 20 | Profiler draaien tijdens de lag |
| Mediaan laag, 95e percentiel hoog | Pieken | Zoek autosave, chunkgeneratie of een taak op een timer |
Hoe draai je /spark profiler op het juiste moment?
De belangrijkste regel: profileer terwijl de lag er is. Een rapport van een rustige zondagochtend zegt niets over de vrijdagavondpiek. Start met /spark profiler start, laat hem drie tot vijf minuten lopen en sluit af met /spark profiler stop. Je krijgt een link naar een online viewer die je kunt delen met je team of met support.
Een paar opties maken het verschil:
--timeout 300stopt automatisch na 300 seconden, voor als je het zelf vergeet.--only-ticks-over 100neemt alleen ticks mee die langer dan 100 ms duurden. Ideaal voor haperingen terwijl je gemiddelde MSPT prima is.--thread *profileert alle threads, niet alleen de hoofdthread. Op modded servers zit chunkgeneratie vaak in aparte threads.--allocmeet geen tijd maar geheugentoewijzing: welke code maakt het meeste afval.
Laat tijdens de sessie een speler naar het probleemgebied vliegen; een kort rapport lees je sneller dan een uur aan ruis.
Hoe lees je een spark-rapport zonder te verdwalen?
De viewer opent met een boom. Bovenaan staat de hoofdlus van de server op ongeveer 100 procent. Dat getal zegt niets, daar gaat alle tijd per definitie heen. Klap dus steeds de zwaarste subtak open, tot het percentage uiteenvalt in tien takjes van een paar procent. De laatste tak die nog een fors deel pakt, is je verdachte. Zie je 60 procent in een tak die alleen maar "tick" heet, dan ben je niet diep genoeg.
Twee dingen versnellen dat. spark kan de gemeten tijd toewijzen aan de bron, dus aan de plugin of mod waar de code vandaan komt; dat geeft binnen tien seconden een top drie. En pakketnamen helpen: zie je net.minecraft, dan doet de server vanilla werk zoals entities, chunks en redstone. Pas wel op: een plugin die duizend mobs spawnt verschijnt als kosten van mobs, niet als kosten van die plugin.
Welke oorzaken komen er in de praktijk het vaakst uit?
Vier vondsten dekken de meeste rapporten die wij voorbij zien komen.
Te veel entities op één plek
Mobfarms zonder killmechaniek, honderden losse items in een tunnel, een berg boten op het spawnplein. In het rapport vloeit de tijd weg in het tikken van entities of in mobspawning. Paper kan per wereld tonen hoeveel entities van welk type waar staan; teleporteer erheen en het is meteen duidelijk.
Een plugin die elke tick iets doet
Klassiek: een scoreboard of hologram dat twintig keer per seconde ververst en daarbij alle spelers doorloopt. Bij tien spelers merk je niets, bij tachtig staat het bovenaan. Van elke tick naar één keer per seconde scheelt een factor twintig, als de plugin dat toelaat.
Hopper-ketens
Hoppers controleren voortdurend of er iets boven of naast ze ligt. Lange rijen onder volle kisten en sorteersystemen van tientallen blokken tellen hard op. Paper heeft opties om die controles te temperen, en vaak is een deel van de keten overbodig.
Een te hoge view-distance
Elke stap kost kwadratisch meer chunks per speler; de standaardwaarde 10 betekent 21 bij 21 chunks rondom iedereen. Omdat simulation-distance apart instelbaar is, kun je spelers ver laten kijken terwijl alleen dichtbij nog entities en redstone tikken. Vaak de goedkoopste winst.
| view-distance | Chunks per speler | Verschil met 10 |
|---|---|---|
| 12 | 625 | +42 procent |
| 10 (standaard) | 441 | referentie |
| 8 | 289 | -34 procent |
| 6 | 169 | -62 procent |
Wat je daarna doet staat in ons artikel over je Minecraft-server optimaliseren en lag verminderen. Verander één ding tegelijk en meet opnieuw, anders weet je niet welke aanpassing werkte.
Wanneer heb je /spark heapsummary nodig?
/spark heapsummary toont wat er op dat moment in het geheugen staat: per klasse het aantal objecten en het aantal bytes, gesorteerd op grootte. Je gebruikt hem als je geheugen blijft oplopen, als garbage collection lange pauzes veroorzaakt of als de server na een paar uur trager wordt terwijl een herstart alles oplost.
Het antwoord staat vaak in de bovenste tien regels: miljoenen entity-objecten wijzen naar diezelfde overvolle farm. Bij zware modpacks is het simpelweg volume: All the Mods 10 draait op NeoForge met Minecraft 1.21.1 en 400 tot 500 mods, vraagt minimaal 10 GB RAM, 12 GB voor een kleine groep en 14 tot 16 GB bij vijf of meer spelers met veel automatisering. FerriteCore scheelt daar 30 tot 40 procent geheugen; Canary en ModernFix helpen op dezelfde loader mee.
Wees eerlijk over de grens: heapsummary is een momentopname, geen lekanalyse. Wil je weten welk object precies iets vasthoudt, dan heb je een heap dump nodig plus een tool als Eclipse MAT. Specialistisch werk, en zelden nodig voor een gewone survivalserver.
Wanneer helpt spark je niet?
Staat je TPS op 20 en je MSPT ruim onder de 50 ms, terwijl spelers klagen over rubberbanding? Dan zit het niet in de tick-lus maar in de verbinding: pakketverlies, een slechte route of een aanval. spark heeft daar /spark ping voor, waarmee je de ping van je spelers naast elkaar ziet. Wijst dat op iets kwaadaardigs, dan is ons artikel over omgaan met DDoS-aanvallen op je game-server nuttiger dan een profiler.
spark vertelt je ook niet of je hardware te traag is. Minecraft leunt zwaar op één enkele kern, dus een oude processor met veel cores valt tegen. Zie je vooral vanilla-taken die overal een beetje te lang duren, zonder duidelijke uitschieter, dan ben je uitgeconfigureerd en is snellere hardware de eerlijke conclusie. Bij Minecraft-hosting bij MC-Node draait de budgetlijn op AMD EPYC 7443P en de premiumlijn op AMD Ryzen 9 9950X, en die tweede is bedoeld voor servers die op single-thread vastlopen.
Veelgestelde vragen
Kost spark zelf prestaties? Nauwelijks. spark werkt met sampling en neemt momentopnames in plaats van elke aanroep te tellen. Laat hem gerust permanent staan; zonder actieve sessie doet hij vrijwel niets. Alleen tijdens /spark profiler is er een kleine extra belasting.
Werkt spark ook op modded servers? Ja, er zijn builds voor Fabric, Forge en NeoForge. Op een pack als All the Mods 10, dat op NeoForge en Minecraft 1.21.1 draait en Java 21 vereist, is spark extra nuttig: met 400 tot 500 mods is raden kansloos. Gebruik daar wel --thread *.
Wat is het verschil tussen /spark tps en /spark profiler? /spark tps is de thermometer: hij zegt of de server het bijhoudt en wat een tick kost. /spark profiler is het onderzoek dat vertelt waarom. Begin met tps en health, en draai de profiler tijdens het probleem.
Moet ik ClearLagg installeren als spark veel entities vindt? Dat mag, maar het is een pleister: ClearLagg ruimt items periodiek op terwijl de farm die ze produceert blijft draaien. Los eerst de bron op en gebruik ClearLagg als vangnet, niet andersom.