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.