Minecraft 1.21 Lag Oplossen: Complete Server Optimalisatie Gids 2026

Published on

Fix je Minecraft 1.21+ server lag met deze complete optimalisatiegids. Paper vs Purpur configuratie, JVM flags (Aikar), performance mods (Lithium, FerriteCore), en simulation distance tuning. Van onspeelbaar naar vloeiende 20 TPS.

Written by Jochem Wassenaar – CEO of Space-Node – 15+ years combined experience in game server hosting, VPS infrastructure, and 24/7 streaming solutions. Learn more

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 Tick hoog → Te veel entities, verhoog despawn rates
  • Tile Entity hoog → Te veel hoppers/chests, optimaliseer redstone
  • World Tick hoog → 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:

  1. Teveel entities in spawn chunks

    • Oplossing: Verlaag spawn-chunk-radius naar 0-2
  2. Mobfarms overload

    • Oplossing: Limiteer entities met entity-activation-range
  3. 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:

  1. Simulation distance te hoog

    • Verlaag naar 4
  2. Redstone lag (hoppers, observers)

    • Gebruik /spark → zoek chunks met veel tile entities
    • Optimaliseer met water streams i.p.v. hoppers
  3. 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-range verlaagd
  • [ ] 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
  • [ ] /tps check 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:

  1. Purpur voor beste performance baseline
  2. Simulation distance 4-6 voor 80% minder CPU
  3. Aikar's JVM flags voor stabiele garbage collection
  4. Gerichte config tuning voor elk aspect
  5. Performance mods waar nodig
  6. 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:

Jochem Wassenaar

About the Author

Jochem Wassenaar – CEO of Space-Node – Experts in game server hosting, VPS infrastructure, and 24/7 streaming solutions with 15+ years combined experience.

Since 2023
500+ servers hosted
4.8/5 avg rating

Our team specializes in Minecraft, FiveM, Rust, and 24/7 streaming infrastructure, operating enterprise-grade AMD Ryzen 9 hardware in Netherlands datacenters. We maintain GDPR compliance and ISO 27001-aligned security standards.

Read full author bio and credentials →

Start Minecraft Server in Minutes

Join content creators worldwide who trust our minecraft infrastructure. Setup is instant and support is always available.

Minecraft 1.21 Lag Oplossen: Complete Server Optimalisatie Gids 2026