Minecraft server performance tips

Lag on a Minecraft server is almost never caused by a single problem — it is usually a combination of factors. This guide covers the most effective optimisations you can apply today to improve TPS (ticks per second) and reduce lag for your players.

What is TPS and why does it matter?

Minecraft servers run on a 20 TPS tick loop. At 20 TPS the game feels smooth; below 15 TPS players notice rubber-banding, delayed block breaking, and entity desync. You can check your current TPS with:

/tps

(Requires a plugin like EssentialsX or Paper's built-in /mspt command.)


1. Use Paper instead of Spigot or Vanilla

Paper is the most popular Minecraft server software for a reason — it includes hundreds of performance patches not present in Spigot or Vanilla.

In the game panel go to Startup and change the server type to Paper, then restart.


2. Tune server.properties

Two settings in server.properties have the biggest impact on performance:

view-distance=6
simulation-distance=4
  • view-distance controls how many chunks are sent to each player (rendering). Lower = fewer chunks to generate and send.
  • simulation-distance controls how far entities and redstone are ticked. This is the bigger performance factor.

For a 20-player server on a mid-range plan, view-distance=8 and simulation-distance=6 is a good starting point.


3. Configure paper.yml / config/paper-world-defaults.yml

Paper exposes dozens of tuning options. Key settings to adjust:

# paper-world-defaults.yml

spawn-limits:
  monsters: 50       # default 70
  animals: 8         # default 10
  water-animals: 3
  ambient: 10

entity-per-chunk-save-limit:
  experience_orb: 16
  snowball: 8
  arrow: 16

tick-rates:
  sensor:
    villager:
      secondarypoisensor: 40   # default 20 — villagers are expensive
  behavior:
    villager:
      validatenearbypoi: 60

These changes reduce the number of entities being ticked per second without removing them from the world.


4. Pre-generate your world

Generating new chunks is one of the most expensive operations a server can do. Pre-generating the world ahead of players eliminates this spike during gameplay.

Install Chunky and run:

/chunky center 0 0
/chunky radius 5000
/chunky start

This pre-generates a 5000-block radius around spawn. Run it while no players are online.


5. Limit entity and mob spawning

Too many mobs is the #1 cause of TPS drops on survival servers.

Install ClearLag or use Paper's built-in entity culling:

# paper-world-defaults.yml
entities-target-with-follow-range: false
per-player-mob-spawns: true

per-player-mob-spawns: true distributes the mob cap across players rather than counting all mobs globally — this makes a huge difference on servers with many players spread out.


6. Optimise plugins

Each plugin adds overhead. Audit your plugin list:

  • Remove plugins you installed for testing and never use
  • Replace multiple single-feature plugins with all-in-one alternatives (e.g. EssentialsX)
  • Check which plugins use async tasks vs. sync tasks — sync tasks block the main thread

Use /timings report (Paper) or Spark profiler to identify which plugins are consuming the most tick time.


7. Configure garbage collection (JVM flags)

Use the Aikar JVM flags for better garbage collection performance. In the game panel Startup tab, set the Java flags to:

-Xms{{SERVER_MEMORY}}M -Xmx{{SERVER_MEMORY}}M -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

These flags significantly reduce GC pause times on servers with 4 GB+ RAM.


Summary checklist

Optimisation Impact
Switch to Paper High
Lower simulation-distance High
Pre-generate world High
Reduce mob caps Medium–High
Tune paper.yml entity settings Medium
Remove unused plugins Medium
Apply Aikar JVM flags Medium

Start with the high-impact changes first. After each change, monitor TPS with /mspt for several minutes before moving to the next.


Further reading

Was this article helpful?