
Snel antwoord: Minecraft 1.21 lag wordt veroorzaakt door zwaardere wereldgeneratie en meer entiteiten. Los dit op met: 1) Purpur server jar (beste performance fork), 2) Verlaag simulation-distance naar 4-6, 3) Installeer Lithium + FerriteCore mods, 4) Gebruik correcte JVM flags (Aikar's). Hoeveel spelers je server daarna aankan, hangt vooral af van je plugins, farms en mods. Meet het zelf met /tps, /mspt en Spark.
Waarom Minecraft 1.21+ Zoveel Zwaarder Is
De Technische Veranderingen
Minecraft 1.21 "Tricky Trials" en 1.21+ introduceerden significante wijzigingen:
| Verandering | Waarom het performance kost |
|---|---|
| Trial Chambers (nieuwe structuur) | Complexe generatie met veel entiteiten en spawners |
| Breeze mob | Eigen AI en pathfinding |
| Wind Charges | Extra projectielen om te simuleren in gevechten |
| Copper en Tuff varianten | Meer block states in het geheugen |
Hoeveel extra belasting dat oplevert, hangt helemaal af van je wereld en je spelers, dus we plakken er geen percentage op. Een setup die op 1.20 net 20 TPS haalde, kan op 1.21 tekortschieten met dezelfde hardware en plugins. Vergelijk /mspt en een Spark profiel van voor en na de update om te zien waar de extra tijd heen gaat.
Het TPS Probleem
TPS = Ticks Per Second
Minecraft draait op een "tick loop": 20x per seconde wordt de gehele wereld geüpdatet (mob movement, redstone, crop growth, etc.).
- 20 TPS = Perfect, elke tick duurt 50ms
- 15-18 TPS = Merk je gameplay lag, beweging stottert
- <15 TPS = Onspeelbaar, severe lag spikes
Stap 1: De Juiste Server Software (Paper vs Purpur vs Forge)
1.1 De Server Software Hiërarchie
Vanilla (Mojang) → Slecht voor performance
↓
Spigot → Basis optimalisaties
↓
Paper → Excellente optimalisaties + API
↓
Purpur → Paper + configuratie vrijheid, de beste van de vier
Oudere overzichten zetten Pufferfish tussen Paper en Purpur, omdat Purpur vroeger de patches van Pufferfish overnam. De huidige Purpur is direct op Paper gebouwd. Pufferfish zelf heeft geen build voor 26.x (de nieuwste download is 1.21.8), dus op een actuele server is het geen optie.
1.2 Waarom Purpur?
Purpur = Paper + extra configuratie en gameplay opties
| Feature | Vanilla | Paper | Purpur |
|---|---|---|---|
| Async chunk loading | Nee | Ja | Ja (van Paper) |
| Entity activation range | Nee | Ja (spigot.yml) | Zelfde als Paper |
| Redstone optimalisaties | Nee | Ja | Zelfde als Paper |
| Config opties | Weinig | Veel | Zeer veel |
| Villager lobotomize optie | Nee | Nee | Ja |
| Gameplay features | Basis | Basis | Uitgebreid |
Hoe groot het verschil op jouw server is, hangt af van je plugins, farms en het aantal spelers. Meet het daarom zelf: noteer /mspt tijdens een normale drukke avond, wissel van jar, en vergelijk met een vergelijkbare avond daarna.
1.3 Purpur Installeren
Download:
Ga naar https://purpurmc.org/downloads
# SSH naar je VPS
ssh root@je-vps-ip
# Maak server directory
mkdir -p /opt/minecraft-server
cd /opt/minecraft-server
# Download Purpur (vervang versie met actuele)
wget https://api.purpurmc.org/v2/purpur/1.21.1/latest/download -O purpur.jar
# Accepteer EULA
echo "eula=true" > eula.txt
Eerste start (genereert config files):
java -Xms2G -Xmx4G -jar purpur.jar nogui
Stop de server na 30 seconden (Ctrl+C). Je hebt nu alle config files.
Stap 2: Kritieke Configuratie Aanpassingen
2.1 server.properties (Basis Instellingen)
nano server.properties
Belangrijkste wijzigingen:
# === PERFORMANCE CRITICAL ===
# Simulation distance: Hoeveel chunks om speler "actief" zijn
# Standaard: 10 → Verlaag naar 4-6
# Dit is DE belangrijkste instelling!
simulation-distance=4
# View distance: Hoeveel chunks speler kan ZIEN
# Kan hoog blijven, spelers zien ver maar wereld is alleen dichtbij actief
view-distance=10
# Network compression: Balans tussen CPU en bandbreedte
# 256 is sweet spot
network-compression-threshold=256
# Spawn protection (onnodig op survival)
spawn-protection=0
# === CHUNK LOADING ===
# Hoeveel chunks rond spawnpoint altijd geladen blijven
# Verlaag of 0 voor lagere RAM
spawn-chunk-radius=2
Waarom is simulation-distance zo cruciaal?
| Simulation Distance | Actieve chunks per speler | Aandeel van de standaard |
|---|---|---|
| 10 (standaard) | 441 chunks | 100% |
| 6 | 169 chunks | 38% |
| 4 | 81 chunks | 18% |
Van 10 naar 4 gaan betekent ruim 80% minder gesimuleerde chunks rond elke speler. Spelers merken dit nauwelijks (farms iets langzamer, mobs spawnen dichterbij).
2.2 purpur.yml (Geavanceerde Purpur Opties)
nano purpur.yml
Performance Secties:
world-settings:
default:
# === MOB AI OPTIMALISATIE ===
mobs:
# Zet AI uit voor specifieke mobs die weinig bijdragen
zombie:
ridable: false
aggressive-towards-villager-when-lagging: false
# Tropische vissen doen NIETS maar kosten veel AI
tropical_fish:
ridable: false
takes-damage-from-water: false
# Axolotls spawnen veel maar doen weinig
axolotl:
ridable: false
# === REDSTONE ===
# Limiteer hopper checks (grootste oorzaak van lag)
hopper:
disable-move-event: true
# === ENTITIES ===
# Voeg dropped items samen (minder entiteiten)
merge-radius:
item: 4.0
exp: 6.0
# Verwijder items sneller
alt-item-despawn-rate:
enabled: true
items:
cobblestone: 300 # 15 sec (was 6000 = 5 min)
netherrack: 300
sand: 300
gravel: 300
# === VILLAGERS (CPU KILLERS) ===
villager:
# Limiteer hoeveel villagers per tick AI krijgen
lobotomize:
enabled: true
check-interval: 100
# Disable brain ticking als ver weg
brain-ticks: 2
# === CHUNK LOADING ===
# Async chunk loading (niet blokkeert main thread)
use-async-pathfinding: true
Pro tip: Lobotomize Villagers
Lobotomize = "hersendood maken". Villagers die niet kunnen pathfinden (bijv. opgesloten in trading hall) krijgen na 100 ticks geen AI meer. Ze werken nog steeds (trades, breeding), maar kosten nauwelijks nog CPU. Enorme boost voor servers met trading halls.
2.3 spigot.yml (Spigot Optimalisaties)
nano spigot.yml
world-settings:
default:
# === MOB SPAWN LIMIETEN ===
# Standaard spawnen VEEL te veel mobs
mob-spawn-range: 6 # Was 8, verlaag = minder mobs ver weg
entity-activation-range:
# Hoever mobs "actief" zijn (AI draait)
animals: 16 # Was 32
monsters: 24 # Was 32
raiders: 48 # Was 48 (ok)
misc: 8 # Was 16
water: 8 # Was 16 (vissen/axolotls)
villagers: 16 # Was 32
flying-monsters: 48 # Phantoms
# === TICK RATES ===
# Hoe vaak bepaalde systemen updaten
entity-tracking-range:
players: 48
animals: 48
monsters: 48
misc: 32
# === HOPPER OPTIMALISATIE ===
hopper-transfer: 8 # Was 8 (ok)
hopper-check: 1 # Was 1 (ok)
hopper-amount: 1 # Hoeveel items per transfer
# === MERGE SETTINGS ===
merge-radius:
item: 4.0
exp: 6.0
Let op met growth modifiers
De growth instellingen in spigot.yml worden vaak verkeerd om gebruikt. 100 is de vanilla snelheid, en een hogere waarde laat gewassen sneller groeien, niet langzamer. De Paper documentatie omschrijft het als "The growth modifier percentage for cactus, where Vanilla speed is 100%". Een lagere waarde maakt farms trager, maar de server blijft die blokken gewoon random ticken, dus het is geen echte performance winst. Laat ze op 100 staan en pak farms aan met entity limieten en item merging.
2.4 paper-world-defaults.yml (Paper Specifiek)
nano config/paper-world-defaults.yml
entities:
# === SPAWNING ===
spawning:
# Limiteer totaal aantal entiteiten
spawn-limits:
ambient: 5 # Vleermuizen
axolotls: 3 # Axolotls (CPU killers)
creature: 8 # Dieren
monster: 50 # Monsters
underground_water_creature: 3 # Glow squid
water_ambient: 15 # Vissen
water_creature: 3 # Dolphins/turtles
# === TICK RATES ===
# Per-mob spawning budget
per-player-mob-spawns: true
# === BEHAVIOR ===
behavior:
# Disable AI voor mobs ver weg
tick-inactive-villagers: false
# Zombies breken geen deuren (scheelt pathfinding)
zombie-villager-infection-chance: 50.0
chunks:
# === CHUNK SYSTEM ===
# Auto-save interval (hoger = minder IO lag)
auto-save-interval: 6000 # Was 6000 (5 min is ok)
# Prevent chunk loading cascade (lag spike oorzaak)
prevent-moving-into-unloaded-chunks: true
# Max chunks per tick
max-auto-save-chunks-per-tick: 8
Stap 3: Java Startup Flags (Aikar's Flags)
3.1 Waarom Standaard Java Slecht Is
Standaard java -jar server.jar gebruikt oude garbage collector (GC) die:
- De server bij grote garbage collections merkbaar laat bevriezen
- Gebruikt geheugen inefficiënt
- Veroorzaakt "lag spikes" waar spelers van DC'en
3.2 Aikar's Flags: De Gouden Standaard
Deze flags zijn ontwikkeld door Aikar en worden al jaren veel gebruikt op Paper servers.
Voor 4GB RAM server:
java -Xms4G -Xmx4G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-jar purpur.jar nogui
Voor 6GB RAM server:
Vervang -Xms4G -Xmx4G met -Xms6G -Xmx6G
Voor 8GB+ RAM server (ZGC variant):
java -Xms8G -Xmx8G \
-XX:+UseZGC \
-XX:+ParallelRefProcEnabled \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:ZCollectionInterval=5 \
-XX:ZAllocationSpikeTolerance=2.0 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-jar purpur.jar nogui
ZGC (Z Garbage Collector) is nog beter voor 8GB+ servers: GC pauses <10ms (totaal onmerkbaar).
3.3 Maak Een Start Script
nano start.sh
#!/bin/bash
# Aikar's flags voor 4GB
java -Xms4G -Xmx4G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=40 \
-XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 \
-XX:G1HeapWastePercent=5 \
-XX:G1MixedGCCountTarget=4 \
-XX:InitiatingHeapOccupancyPercent=15 \
-XX:G1MixedGCLiveThresholdPercent=90 \
-XX:G1RSetUpdatingPauseTimePercent=5 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-jar purpur.jar nogui
chmod +x start.sh
./start.sh
Stap 4: Performance Mods (Essentieel voor 1.21)
4.1 Lithium: Server-Side Performance
Wat doet Lithium?
Optimiseert vrijwel alle Minecraft systemen zonder gameplay te veranderen:
- Mob AI pathfinding
- Block ticking (crops, redstone)
- Chunk loading
- Physics berekeningen
Installatie:
# Download van Modrinth
cd /opt/minecraft-server/mods
wget https://cdn.modrinth.com/data/gvQqBUqZ/versions/latest/lithium-fabric-mc1.21.jar
Let op: Lithium is een mod voor Fabric (nieuwere versies bestaan ook voor NeoForge). Op Paper of Purpur laadt hij niet; die servers gebruiken hun eigen optimalisatiepatches.
4.2 FerriteCore: RAM Optimalisatie
Wat doet FerriteCore?
Verlaagt het RAM gebruik door block states en andere spelgegevens efficiënter op te slaan. De winst is het grootst op modded servers met veel blokken en modellen, en het helpt op kleine servers van 4GB.
Download:
cd /opt/minecraft-server/mods
wget https://cdn.modrinth.com/data/uXXizFIs/versions/latest/ferritecore-7.0.0-fabric.jar
Resultaat: kijk voor en na de installatie naar de RAM grafiek in je panel om te zien wat het op jouw pack oplevert.
4.3 Krypton: Netwerk Optimalisatie
Optimaliseert hoe de server pakketten verstuurt naar clients. Vooral nuttig bij 15+ spelers.
wget https://cdn.modrinth.com/data/fQEb0iXm/versions/latest/krypton-0.2.8-fabric.jar
4.4 Voor Modded Servers (Forge/NeoForge)
Als je een modded server draait (All the Mods, FTB, etc.):
Essentiële Performance Mods:
| Mod | Functie | Link |
|---|---|---|
| ModernFix | General optimalisaties | modrinth.com/mod/modernfix |
| FerriteCore | RAM reductie | modrinth.com/mod/ferritecore |
| EntityCulling | Render optimalisatie | modrinth.com/mod/entityculling |
| Canary | Lithium voor Forge | modrinth.com/mod/canary |
| Roadrunner | Async chunk loading | modrinth.com/mod/roadrunner |
Stap 5: Monitoring en Diagnostics
5.1 Spark: Performance Profiler
Installatie:
cd /opt/minecraft-server/plugins
wget https://ci.lucko.me/job/spark/lastSuccessfulBuild/artifact/spark-bukkit/build/libs/spark-bukkit.jar
Gebruik in-game:
/spark profiler start
# Laat server 2-3 minuten draaien
/spark profiler stop
/spark profiler open
Je krijgt een weblink met gedetailleerde analyse:
- Welke plugins/mods kosten meeste CPU
- Welke chunks veroorzaken lag
- Entity counts per chunk
5.2 Timings: Ingebouwde Diagnostics
/timings on
# Wacht 10 minuten
/timings paste
Geeft rapport met:
- TPS geschiedenis
- Plugin performance
- Entity activiteit
Lees timings report:
Zoek naar rode balken in het rapport:
Entity Tickhoog → Te veel entities, verhoog despawn ratesTile Entityhoog → Te veel hoppers/chests, optimaliseer redstoneWorld Tickhoog → Simulation distance te hoog
5.3 TPS Commando
Check real-time TPS:
/tps
Output:
TPS from last 1m, 5m, 15m: 19.8, 19.9, 20.0
Goed: >19.5 consistent Matig: 17-19 (merkbare lag) Slecht: <17 (onspeelbaar)
Stap 6: Hardware Overwegingen (VPS Selectie)
6.1 RAM Requirements
| Server Type | Spelers | Mods | Minimum RAM | Aanbevolen RAM |
|---|---|---|---|---|
| Vanilla 1.21 | 1-10 | Geen | 2GB | 4GB |
| Vanilla 1.21 | 10-20 | Geen | 4GB | 6GB |
| Vanilla 1.21 | 20-50 | Geen | 6GB | 8GB |
| Light Modpack | 1-10 | 50-100 | 4GB | 6GB |
| Heavy Modpack | 1-10 | 150+ | 6GB | 8-12GB |
| ATM9/FTB | 1-5 | 300+ | 8GB | 12-16GB |
6.2 CPU Requirements
Clock speed > Core count voor Minecraft (single-threaded game logic).
Space-Node aanbevelingen (prijzen per maand, Standard tier):
- MC Iron, 4GB voor €3,60: vanilla of Paper met een kleine groep
- MC Lapis, 6GB voor €5,40: een plugin SMP met meer spelers
- MC Diamond, 8GB voor €7,20, of MC Special 1, 12GB voor €10,80: modpacks of grotere communities
Dit zijn startpunten. Plugins, farms en mods bepalen meer dan het aantal spelers, en je kunt later upgraden zonder je wereld kwijt te raken.
6.3 Storage: NVMe vs SSD vs HDD
| Type | Chunk loading | Auto-save | Prijs |
|---|---|---|---|
| HDD | Traag, zichtbaar tijdens verkennen | Kan merkbare freezes geven | Goedkoop |
| SATA SSD | Veel sneller | Hooguit een kleine hapering | Standaard |
| NVMe | Snelst | Zelden merkbaar | Inmiddels gangbaar bij game hosts |
Voor Minecraft: NVMe is significant beter. Chunk loading is I/O intensief. Alle Space-Node Minecraft plannen draaien op NVMe opslag.
Stap 7: Troubleshooting Specifieke Problemen
Probleem: Lag Spikes elke 30 seconden
Oorzaak: Java Garbage Collection met slechte flags
Diagnose:
# Voeg toe aan startup flags
-XX:+PrintGCDetails -Xlog:gc*:file=gc.log
Check gc.log. Als je ziet:
[Full GC (Allocation Failure) 2048M->1800M(2048M), 2.1 secs]
Dit is een 2+ seconde freeze. Oplossing: Gebruik Aikar's flags.
Probleem: Hoog RAM gebruik (server crashed)
Diagnose:
# In-game commando
/forge entity list
# Of via Spark
/spark heapdump
Veel voorkomende oorzaken:
-
Teveel entities in spawn chunks
- Oplossing: Verlaag
spawn-chunk-radiusnaar 0-2
- Oplossing: Verlaag
-
Mobfarms overload
- Oplossing: Limiteer entities met
entity-activation-range
- Oplossing: Limiteer entities met
-
Memory leak in plugin/mod
- Oplossing: Check Spark heapdump, disable verdachte plugin
Probleem: Server "Can't keep up" warnings
Console output:
[WARN] Can't keep up! Is the server overloaded? Running 5000ms behind, skipping 100 ticks
Dit betekent: De server kon één tick niet in 50ms afwerken, dus slaat ticks over = rubberband lag.
Top 3 oorzaken:
-
Simulation distance te hoog
- Verlaag naar 4
-
Redstone lag (hoppers, observers)
- Gebruik
/spark→ zoek chunks met veel tile entities - Optimaliseer met water streams i.p.v. hoppers
- Gebruik
-
Te weinig CPU
- Upgrade VPS of verlaag speler limit
Stap 8: Basis Configuratie Checklist
Print deze checklist en vink af:
server.properties:
-
simulation-distance=4(of max 6) -
view-distance=10 -
network-compression-threshold=256
purpur.yml:
-
villager.lobotomize.enabled=true -
merge-radius.item=4.0 -
alt-item-despawn-rate.enabled=true
spigot.yml:
-
mob-spawn-range=6 -
entity-activation-rangeverlaagd -
hopper-transfer=8
Start script:
- Aikar's flags gebruikt
- RAM setting correct (-Xms en -Xmx gelijk)
- Java 21 (Temurin/Adoptium)
Performance mods:
- Lithium/Purpur optimalisaties
- FerriteCore (als modded)
Monitoring:
- Spark plugin geïnstalleerd
-
/tpscheck na elke wijziging
Resultaat: Meet Je Eigen Voor en Na
We laten je hier geen verzonnen voor-en-na tabel zien. Hoeveel het oplevert, hangt af van je wereld, plugins en spelers. Wat je wel kunt doen, is het zelf meten:
- Noteer voordat je iets verandert
/tps,/mspt, het RAM gebruik uit de grafiek in je panel en hoe vaak de console "Can't keep up" meldt, tijdens een normale drukke avond. - Voer de aanpassingen uit deze gids één voor één door.
- Noteer dezelfde cijfers op een vergelijkbare avond daarna.
Wat spelers merken als het werkt:
- Geen rubberband
- Chunks die bijhouden terwijl je loopt
- Vloeiende combat
- Geen disconnects door lag
Conclusie: Van Laggende Server naar Vloeiende Ervaring
Door deze gids te volgen, transformeer je een Minecraft 1.21 server van onbruikbaar naar professioneel niveau:
- Purpur voor beste performance baseline
- Simulation distance 4-6 voor veel minder gesimuleerde chunks
- Aikar's JVM flags voor stabiele garbage collection
- Gerichte config tuning voor elk aspect
- Performance mods waar nodig
- Monitoring tools om problemen te vinden
Tijdsinvestering: 1-2 uur setup, lifetime benefits.
Klaar om een geoptimaliseerde Minecraft server te draaien? Space-Node Minecraft hosting draait op Ryzen 9 CPU's en NVMe opslag, en elk plan ondersteunt Purpur. Vanaf €2,70 per maand (MC Coal, 3GB) met 12/7 support.
Gerelateerde gidsen: