Back to All Technical Guides
Minecraft
12 min read
Updated 2026-08-24

Minecraft Server Performance Optimization: The Ultimate Paper & Purpur Guide (2026)

Comprehensive deep-dive into optimizing Paper and Purpur Minecraft servers. Tune Aikar's JVM garbage collection flags, configure chunk ticking, optimize entity tracking ranges, and achieve a steady 20.0 TPS with 100+ players.

V
Veles B.H
Lead Systems Architect & Core Developer
Advertisement

1. Understanding Minecraft Server Bottlenecks: Tick Loop & CPU Single-Thread Limits

The core architecture of the Minecraft server software executes within a single-threaded game loop (the main tick loop). Every 50 milliseconds, the server must process tile entities, mob AI, redstone circuits, player movement, chunk generation, and network packets to maintain a flawless 20.0 Ticks Per Second (TPS).

When the main tick takes longer than 50ms (MSPT > 50.0), the server drops ticks, producing visible rubberbanding, delayed block breaking, and desynchronized combat. While modern forks like Paper and Purpur offload world saving, chunk generation, and authentication off the main thread, game logic remains single-threaded. This is why high single-core CPU frequency on dedicated enterprise virtualization processors is overwhelmingly more important than high core counts with low clock speeds.

Engineering Tips & Best Practices
  • Always measure MSPT (Milliseconds Per Tick) rather than just TPS. A server at 20 TPS could have an MSPT of 48ms, meaning it is only 2ms away from lagging.
  • Use the built-in Spark profiler (`/spark profiler start`) to pinpoint exactly which plugin, entity type, or coordinate is consuming tick time.

2. The Golden Standard: Aikar's Optimized G1GC JVM Flags

Java's default Garbage Collector (GC) often pauses the main thread for several hundred milliseconds when cleaning up old objects, causing severe micro-stutters. Aikar's Garbage Collector flags configure Java's Garbage-First (G1) collector to execute in concurrent, micro-millisecond phases synchronized with the Minecraft tick rate.

BASH
java -Xms8G -Xmx8G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -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 server.jar nogui
Advertisement
#minecraft server optimization#paper mc config#purpur tps boost#aikar flags#chunk ticking#entity culling