Minecraft Server Optimization Guide: From Vanilla to Paper
The complete guide to optimizing your Minecraft server for maximum performance. Covers Paper, Spigot, configuration files, JVM flags, and more.
Introduction
Every Minecraft server owner faces the same problem: lag. Players leave when TPS drops below 20, chunk loads stutter, and mob farms stop working.
This guide covers everything you need to optimize your Minecraft server—from server JAR selection to JVM flags. We’ll focus on Paper and its forks, which offer the best balance of performance and compatibility.
Each server is different. Tweak settings to fit your needs—this guide teaches you why each option matters.
Choosing Your Server JAR
Your choice of server software is the foundation of performance.
Recommended: Paper
Paper is the most popular server software for a reason:
- Built-in performance optimizations
- Fixes gameplay inconsistencies
- Active development
- Large plugin compatibility
Recommended: Purpur
Purpur is a Paper fork focused on features:
- All Paper optimizations
- Extensive configuration options
- Freedom to customize
Avoid
- Bukkit/CraftBukkit/Spigot — Outdated, poor performance
- Paid JARs claiming “async” — 99.99% scams
- Random downstream forks — Instability issues
Essential Configurations
server.properties
sync-chunk-writes
Important for Vanilla/Fabric/Spigot
Set sync-chunk-writes to false in server.properties. This allows the server to save chunks off the main thread, reducing tick load.
Paper and its forks forcibly set this to false.
simulation-distance
Recommended: 4
This is how far from the player the server calculates game logic (furnaces smelting, crops growing). Keep it low (3-4) because view-distance handles what players see.
view-distance
Recommended: 7-10
This is how far chunks are sent to players. The total view equals the greater of simulation-distance or view-distance.
spigot.yml
merge-radius
merge-radius:
item: 3.5
exp: 4.0
Items and XP orbs merge when close together. Higher values = fewer entities = better performance. Don’t set too high or items vanish through walls.
mob-spawn-range
Recommended: 3
Reduces where mobs spawn around players. Lower = more mobs per player. Combine with spawn-limits for best results.
Mob Optimization
bukkit.yml
spawn-limits
spawn-limits:
monsters: 20
animals: 5
water-animals: 2
ambient: 1
Formula: [playercount] * [limit]. Lower = fewer mobs = better performance. You can go as low as 20 monsters with proper mob-spawn-range.
ticks-per
ticks-per:
monster-spawns: 10
animal-spawns: 400
water-spawns: 400
Water/ambient mobs don’t need to spawn every tick. Monster spawns at 10 ticks maintains spawn rates while reducing load.
paper-world.yml
per-player-mob-spawns
Recommended: true
Enables per-player mob spawning. This gives a singleplayer-like experience and lets you use lower spawn-limits.
despawn-ranges
despawn-ranges:
monster:
hard: 72
soft: 30
Mobs despawn faster when far from players. Set hard range to (simulation-distance * 16) + 8.
entity-per-chunk-save-limit
entity-per-chunk-save-limit:
arrow: 16
spectral_arrow: 16
trident: 16
splash_potion: 8
experience_orb: 16
small_fireball: 8
fireball: 8
Limits projectile entities per chunk. Prevents crash from excessive projectiles.
Chunk Management
paper-world.yml
delay-chunk-unloads-by
Recommended: 10s
Chunks stay loaded after players leave. Prevents constant load/unload cycles. Too high = too many loaded chunks.
prevent-moving-into-unloaded-chunks
Recommended: true
Prevents players from walking into unloaded chunks, which causes sync chunk loading (major lag).
Redstone Optimization
paper-world.yml
redstone-implementation
Recommended: ALTERNATE_CURRENT
Replaces vanilla redstone with a faster algorithm. Based on the Alternate Current mod.
Minor technical redstone inconsistencies possible. Performance gains far outweigh niche issues.
Hopper Optimization
spigot.yml
hopper-transfer
Recommended: 8
Time (in ticks) hoppers wait to move items. Higher = better performance but breaks hopper clocks.
hopper-check
Recommended: 8
Time between hopper checks. Same trade-offs as hopper-transfer.
paper-world.yml
hopper.disable-move-event
Only disable if you don’t use plugins listening to InventoryMoveItemEvent (e.g., protection plugins).
Item Despawn Rates
paper-world.yml
alt-item-despawn-rate
alt-item-despawn-rate:
enabled: true
items:
cobblestone: 300
dirt: 300
sand: 300
gravel: 300
netherrack: 300
bamboo: 300
sugar_cane: 300
oak_leaves: 300
Despawn common blocks faster. Combined with merge-radius, this replaces item clearing plugins.
Villager Optimization
purpur.yml
villager.lobotomize.enabled
Recommended: true
Lobotomized villagers have no AI and only restock trades. Reduces pathfinding lag significantly.
villager.search-radius
villager:
search-radius:
acquire-poi: 16
nearest-bed-sensor: 16
Reduces villager search range. Breaks distant job site detection but boosts performance.
spigot.yml
tick-inactive-villagers
Recommended: false
Disable villager ticking outside activation range for performance.
Nether Ceiling
paper-world.yml
nether-ceiling-void-damage-height
Recommended: 127
Damages players above the Nether ceiling (y=127 in vanilla). Prevents Nether roof travel exploits.
Anti-Xray
paper-world.yml
anti-xray.enabled
Recommended: true
Built-in ore hiding. Actually decreases performance slightly but is more efficient than anti-xray plugins.
Explosion Optimization
paper-world.yml
optimize-explosions
Recommended: true
Faster explosion algorithm. Minor inaccuracy in damage calculation—usually unnoticeable.
Treasure Maps
paper-world.yml
treasure-maps.enabled
Recommended: false
Treasure map generation is extremely expensive. Only enable if you pregenerated your world.
treasure-maps.find-already-discovered
find-already-discovered:
loot-tables: true
villager-trade: true
Allows maps to find discovered structures instead of searching unexplored chunks.
JVM Startup Flags
Minecraft 1.20.5+ requires Java 21.
Recommended: Aikar’s Flags
Use the flags.sh generator for optimized JVM flags.
Key flags include:
- G1GC garbage collector
- Optimized heap sizes
- Tick rate optimizations
- Async tick requirements
Don’t use alternative JVMs (GraalVM, OpenJ9). They’re not supported by Paper.
What NOT to Use
Item Clearing Plugins
Replace with:
merge-radiusin spigot.ymlalt-item-despawn-ratein paper-world.yml
Mob Stacker Plugins
Natural mob spawning + stacking causes more lag. The server constantly spawns new mobs.
/reload Command
Extremely dangerous. Causes:
- Memory leaks
- Plugin state corruption
- Event handler issues
Monitoring Performance
/mspt Command (Paper)
Shows tick calculation time:
- Values under 50ms = healthy
- Occasional spikes = normal
- Consistent spikes = problem
Spark Plugin
Spark profiles CPU and memory usage:
/spark paper— Profiler/spark tps— TPS analysis
Quick Reference
| Setting | File | Recommended |
|---|---|---|
| view-distance | server.properties | 7-10 |
| simulation-distance | server.properties | 4 |
| spawn-limits monsters | bukkit.yml | 20 |
| merge-radius item | spigot.yml | 3.5 |
| mob-spawn-range | spigot.yml | 3 |
| per-player-mob-spawns | paper-world.yml | true |
| redstone-implementation | paper-world.yml | ALTERNATE_CURRENT |
| optimize-explosions | paper-world.yml | true |
| anti-xray.enabled | paper-world.yml | true |
Summary
Optimization is ongoing. Start with:
- ✓ Use Paper or Purpur
- ✓ Set sync-chunk-writes: false
- ✓ Configure spawn-limits
- ✓ Enable merge-radius
- ✓ Use per-player-mob-spawns
- ✓ Add JVM flags
Need help? Our support team optimizes servers daily.
Deploy your optimized server at nellyx.xyz
