Back to Blog

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.

Team Nellyx
Team Nellyx
Author
April 30, 2026
7 min read
Minecraft Server Optimization Guide: From Vanilla to Paper

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.

Paper is the most popular server software for a reason:

  • Built-in performance optimizations
  • Fixes gameplay inconsistencies
  • Active development
  • Large plugin compatibility

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.

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-radius in spigot.yml
  • alt-item-despawn-rate in 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

SettingFileRecommended
view-distanceserver.properties7-10
simulation-distanceserver.properties4
spawn-limits monstersbukkit.yml20
merge-radius itemspigot.yml3.5
mob-spawn-rangespigot.yml3
per-player-mob-spawnspaper-world.ymltrue
redstone-implementationpaper-world.ymlALTERNATE_CURRENT
optimize-explosionspaper-world.ymltrue
anti-xray.enabledpaper-world.ymltrue

Summary

Optimization is ongoing. Start with:

  1. ✓ Use Paper or Purpur
  2. ✓ Set sync-chunk-writes: false
  3. ✓ Configure spawn-limits
  4. ✓ Enable merge-radius
  5. ✓ Use per-player-mob-spawns
  6. ✓ Add JVM flags

Need help? Our support team optimizes servers daily.


Deploy your optimized server at nellyx.xyz

Team Nellyx

Team Nellyx

Minecraft server infrastructure experts.

Share this article