Back to Knowledge Base Performance

How to Optimize Your Minecraft Server for 20 TPS

A practical guide to eliminating lag and keeping your server running at a smooth 20 ticks per second.

Updated October 2026 · 12 min read

What is TPS?

TPS stands for Ticks Per Second. Minecraft targets 20 TPS, meaning the server processes game logic 20 times per second. At 20 TPS, everything runs smoothly. Below 18 TPS, players notice lag — blocks break slowly, mobs stutter, and redstone misfires. Below 15 TPS, the server is in trouble.

Step 1: Use Paper or Purpur

If you're still running Vanilla or Spigot, switching to Paper is the single biggest performance improvement you can make. Paper includes async chunk loading, optimized entity AI, improved hopper performance, and dozens of other optimizations that don't exist in Spigot.

Paper is a drop-in replacement for Spigot — all your Spigot plugins will work. Just swap the JAR file and start the server.

Step 2: Optimize server.properties

These settings have the biggest impact:

# Reduce view distance to cut chunk load
view-distance=8
# Simulation distance controls entity ticking range
simulation-distance=6
# Network compression threshold (default 256, lower = more CPU, less bandwidth)
network-compression-threshold=256
# Max tick time before watchdog kills the server (-1 to disable)
max-tick-time=60000

view-distance is the most impactful setting. Each point of view distance adds a significant number of loaded chunks. Dropping from 10 to 8 reduces loaded chunks per player by about 36%. Most players won't notice the difference, especially if you use the Paper-specific sending-distance setting to send chunks further than they tick.

Step 3: JVM Flags (Aikars Flags)

The JVM flags you start your server with matter. The community standard is "Aikars Flags," which configure Java's garbage collector for Minecraft-specific workloads:

java -Xms8G -Xmx8G -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 -jar paper.jar --nogui

Key points:

  • Set Xms equal to Xmx. This pre-allocates all memory at startup and avoids resize pauses.
  • For 12+ GB, change G1NewSizePercent=40 and G1MaxNewSizePercent=50.
  • Don't allocate more than you need. More heap = longer GC pauses.

On a managed host like New Life Host, these flags are pre-configured on every server.

Step 4: Paper Configuration

Paper's config files offer dozens of performance knobs. The most impactful ones:

paper-world-defaults.yml

# Pre-generate chunks to avoid on-the-fly generation lag
chunks.auto-save-interval: 6000
# Reduce entity activation range (entities further away tick less)
entity-activation-range:
  animals: 16
  monsters: 24
  misc: 8
  water: 8
# Despawn ranges
despawn-ranges:
  soft: 28
  hard: 96
# Hopper optimization
hopper:
  disable-move-event: true
  ignore-occluding-blocks: true

paper-global.yml

# Async chunk loading threads (set to number of cores - 1)
chunk-loading-basic:
  autoconfig-send-distance: true

Step 5: Control Entities

Entities (mobs, animals, villagers, item frames, armor stands) are the #1 cause of TPS drops after chunk loading. A single chunk with 200 entities can cost more than a hundred empty chunks.

  • Limit mob farms. Install a plugin like FarmLimiter or StackMob to cap entity counts per chunk.
  • Villager limits. Villager AI is expensive. Keep trading halls compact and limit the number of villagers. Consider using a plugin to optimize villager behavior.
  • Clear dropped items. Use ClearLag or Paper's built-in alt-item-despawn-rate to clean up drops faster.
  • Reduce animal breeding. Set spawn-limits.animals: 8 in bukkit.yml.

Step 6: Pre-Generate Your World

Generating new chunks is expensive. When a player explores uncharted territory, the server has to generate terrain, structures, caves, and biomes in real-time. This can drop TPS below 10 during heavy exploration.

The solution: pre-generate your world before players join. Use the Chunky plugin:

/chunky radius 5000
/chunky start

This pre-generates a 5000-block radius around spawn. Set a world border at the same radius to prevent players from triggering new generation.

Step 7: Audit Your Plugins

Not all plugins are equal. Some are well-optimized; others run expensive operations on the main thread every tick.

  • Install Spark. Run /spark profiler start, let it run for 5 minutes during peak play, then /spark profiler stop. The report shows exactly which plugins consume the most tick time.
  • Remove unused plugins. Every loaded plugin adds overhead even if it's not doing anything visible.
  • Replace heavy plugins. If a dynmap or BlueMap is tanking your TPS, configure it to render less frequently or on a lower thread priority.
  • Watch for async vs sync. Plugins that do database queries, HTTP requests, or file I/O on the main thread will cause lag spikes.

Step 8: Hardware Matters

After optimizing software, your hardware sets the ceiling:

  • CPU clock speed > core count. Minecraft's main loop is single-threaded. A 4-core CPU at 5 GHz outperforms an 8-core at 3 GHz for Minecraft.
  • NVMe > SATA SSD > HDD. Chunk loading and auto-saves hit the disk hard. NVMe storage eliminates disk I/O bottlenecks.
  • DDR5 > DDR4. Higher memory bandwidth helps with chunk data throughput and garbage collection.
  • Enough RAM. See our RAM guide, but don't over-allocate.

Monitoring Checklist

Keep an eye on these regularly:

  • /tps — Should show 20.0 or close to it across all three averages
  • /spark health — Shows TPS, MSPT (milliseconds per tick), CPU, and memory
  • /spark profiler — Run periodically to catch new performance problems
  • Game panel — Watch CPU and RAM usage over time

Hardware That Keeps Up

New Life Host servers run on high-clock CPUs, DDR5 RAM, and NVMe storage — the exact hardware profile that Minecraft benefits from most. Aikars Flags are pre-configured on every server. Plans start at $6.67/mo.

View Plans