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). Een goed geconfigureerde 4GB VPS draait een 10-15 spelers server vloeiend op 20 TPS.
Waarom Minecraft 1.21+ Zoveel Zwaarder Is
De Technische Veranderingen
Minecraft 1.21 "Tricky Trials" en 1.21+ introduceerden significante wijzigingen:
| Verandering | Impact op Performance | Percentage Extra CPU | |-------------|------------------------|---------------------| | Trial Chambers (nieuwe structuur) | Complexe generatie met veel entiteiten | +15-25% | | Breeze mob | Geavanceerde AI met pathfinding | +10% bij spawning | | Wind Charges | Extra projectile physics | +5-10% in combat | | Hogere build limit | Meer chunks om te tracken | +5-15% | | Copper/Tuff varianten | Meer block states in geheugen | +5% RAM |
Resultaat: Een standaard 1.20 setup die 20 TPS haalde, zakt naar 15-18 TPS op 1.21 met dezelfde hardware.
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
↓
Pufferfish → Paper + extra async processing
↓
Purpur → Pufferfish + configuratie vrijheid ⭐ BESTE
1.2 Waarom Purpur?
Purpur = Paper + Pufferfish + extra features
| Feature | Vanilla | Paper | Purpur | |---------|---------|-------|--------| | Async chunk loading | ❌ | ✅ | ✅ | | Mob AI optimalisatie | ❌ | Basis | Geavanceerd | | Config opties | Weinig | Veel | Zeer veel | | Entity activation range | ❌ | Statisch | Dynamisch | | Redstone optimalisaties | ❌ | ✅ | ✅+ | | Per-mob AI uitschakelen | ❌ | ❌ | ✅ | | Gameplay features | Basis | Basis | Uitgebreid |
Praktijk voorbeeld:
Op dezelfde 4GB VPS met 10 spelers:
- Vanilla: 12-15 TPS (onspeelbaar)
- Paper: 18-19 TPS (speelbaar, soms lag)
- Purpur: 19.8-20 TPS (perfect)
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 | Mobspawns | CPU Gebruik | |---------------------|----------------|-----------|-------------| | 10 (standaard) | 441 chunks | Volledig | 100% | | 6 | 169 chunks | 60% | 38% | | 4 | 81 chunks | 40% | 18% |
Van 10 naar 4 gaan bespaart >80% CPU! 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 0% 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
# === GROWTH RATES ===
# Vertraag crop/plant growth (minder ticks)
growth:
cactus-modifier: 150 # Was 100 (50% langzamer)
cane-modifier: 150
melon-modifier: 150
mushroom-modifier: 150
pumpkin-modifier: 150
sapling-modifier: 150
beetroot-modifier: 150
carrot-modifier: 150
potato-modifier: 150
wheat-modifier: 150
# === 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
Waarom growth modifiers verhogen?
Farms werken nog steeds, maar 50% langzamer. Dit bespaart enorm veel CPU omdat block ticking (de check "moet ik groeien?") minder vaak gebeurt. Voor casual servers merk je dit nauwelijks.
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:
- Elke 30-60 seconden bevriest de server voor 500-2000ms
- 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 (Minecraft performance expert) en getest op duizenden 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 (50% sneller)
- 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
# Of voor Paper/Purpur (via plugin wrapper):
# Lithium werkt NIET direct op Paper, maar je hebt Lithium features via Purpur configs
⚠️ Belangrijk: Lithium is een Fabric mod. Voor Paper/Purpur servers heb je de optimalisaties al via Purpur's code (gebaseerd op lithium patches).
4.2 FerriteCore - RAM Optimalisatie
Wat doet FerriteCore?
Reduceert RAM gebruik met 30-40% door efficiëntere datastructuren. Essentieel voor modded of 4GB servers.
Download:
cd /opt/minecraft-server/mods
wget https://cdn.modrinth.com/data/uXXizFIs/versions/latest/ferritecore-7.0.0-fabric.jar
Resultaat: 4GB server met 10 spelers gebruikt nu ~2.8GB i.p.v. 3.8GB = meer ruimte voor chunks.
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).
| VPS Spec | Max Spelers (Vanilla) | TPS Verwachting | |----------|----------------------|-----------------| | 2 cores @ 2.4 GHz | 5-8 | 18-19 TPS | | 2 cores @ 3.0 GHz+ | 10-15 | 19-20 TPS | | 4 cores @ 3.0 GHz+ | 15-25 | 20 TPS | | 6 cores @ 3.5 GHz+ | 25-40 | 20 TPS |
Space-Node Aanbevelingen:
- Budget (€10-15/maand): 4GB RAM, 2 cores → Perfect voor 5-10 spelers
- Standaard (€20-25/maand): 6GB RAM, 4 cores → Goed voor 10-20 spelers
- Pro (€35-50/maand): 8-12GB RAM, 4-6 cores → Heavy modpacks of 20+ spelers
6.3 Storage: NVMe vs SSD vs HDD
| Type | Chunk Load Tijd | Auto-save Lag | Prijs | |------|----------------|---------------|-------| | HDD | 500-1000ms | Merkbare freezes | Goedkoop | | SSD | 50-100ms | Kleine hickup | Standaard | | NVMe | 10-30ms | Onmerkbaar | Premium |
Voor Minecraft: NVMe is significant beter. Chunk loading is I/O intensief. Space-Node VPS gebruikt NVMe standaard.
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: Voor en Na Optimalisatie
Voorbeeld Case: 10 Speler Survival Server
| Metric | Voor (Vanilla) | Na (Purpur + Configs) | Verbetering | |--------|----------------|----------------------|-------------| | TPS | 14-16 | 19.8-20 | +25-40% | | MSPT | 65-80ms | 45-50ms | -30% | | RAM gebruik | 3.8GB | 2.6GB | -30% | | Chunk load tijd | 800ms | 150ms | -80% | | Lag spikes | Elke 30sec | Geen | -100% |
Speler ervaring:
- ✅ Geen rubberband
- ✅ Instant chunk loading
- ✅ 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 80% minder CPU
- ✅ 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 VPS hosting biedt NVMe servers speciaal afgestemd op Minecraft, met pre-configured Purpur setups beschikbaar. Vanaf €10/maand met 24/7 support.
Gerelateerde gidsen: