
Players say "the server is laggy" but lag means different things. It might be network lag (high ping), server lag (low TPS), or client lag (low FPS on their PC). Each has a different cause and a different fix.
Server Lag vs Client Lag vs Network Lag
Server lag (low TPS): The server cannot process the game fast enough. Blocks break with a delay, mobs freeze in place, redstone slows down. Affects everyone.
Client lag (low FPS): The player's computer cannot render the game fast enough. Choppy movement, stuttering. Affects only that player. Not a server problem.
Network lag (high ping): The connection between the player and server is slow. Player rubberbands, actions take time to register. Usually caused by distance or bad internet.
This guide focuses on server lag. That is the only one you can fix from the hosting side.
Understanding TPS
TPS stands for Ticks Per Second. Minecraft runs at 20 TPS. Each tick processes entity movement, block updates, redstone, and network packets. Every tick must complete within 50 milliseconds to maintain 20 TPS.
| TPS | Status | |---|---| | 20 | Perfect | | 18-19 | Barely noticeable | | 15-17 | Noticeable delay on block breaking | | 10-14 | Significant lag, mob freezing | | Below 10 | Unplayable |
Check TPS with Spark:
/spark tps
The Top 5 Causes of Server Lag
1. Too Many Entities
Entities include mobs, item drops, XP orbs, minecarts, armor stands, and falling blocks. Each entity runs AI pathfinding and collision checks every tick.
The worst offenders:
- Mob farms that accumulate hundreds of mobs in a small area
- Item drops that pile up (a broken tree drops 100 items)
- XP orbs from a grinder pooling in one spot
Fix:
In bukkit.yml, reduce spawn limits:
spawn-limits:
monsters: 40
animals: 10
water-animals: 3
water-ambient: 3
ambient: 1
In paper-world-defaults.yml, merge nearby items and XP:
merge-radius:
item: 3.5
exp: 4.0
Use the /kill @e[type=!player] command as a last resort to clear all non-player entities. See our entity management guide.
2. Hopper Networks
Hoppers check for items to transfer every single tick. A sorting system with 200 hoppers makes 200 checks per tick. Multiply this across multiple player bases.
Fix:
In paper-world-defaults.yml:
hopper:
cooldown-when-full: true
disable-move-event: false
In spigot.yml:
ticks-per:
hopper-transfer: 8
hopper-check: 1
This makes hoppers transfer items every 8 ticks instead of every tick. Items move slower through sorting systems but server performance improves dramatically.
3. Chunk Loading
Each online player forces chunks to load around them. 20 players spread across the map means thousands of loaded chunks, each ticking entities and redstone.
Fix:
Reduce simulation distance in server.properties:
simulation-distance=6
This keeps entities and redstone from ticking in distant chunks while still rendering terrain at full view distance.
4. Unoptimized Plugins
Every plugin runs code on the main thread (unless specifically designed for async). A badly coded economy plugin checking a database every tick can tank your TPS by itself.
Fix:
Use Spark to identify which plugins use the most tick time:
/spark profiler start
Wait 5 minutes during peak usage.
/spark profiler stop
The profile tree shows tick time per plugin. If one plugin uses 30 percent of your tick budget, either configure it better, find an alternative, or contact the plugin developer.
5. World Size and Pre-Generation
When players explore new chunks, the server generates terrain in real time. Terrain generation is CPU-intensive. On a busy server with multiple players exploring simultaneously, this drowns the main thread.
Fix:
Pre-generate terrain during off-peak hours with Chunky:
/chunky radius 5000
/chunky start
This generates all terrain within 5000 blocks of spawn. Run it overnight. Once the terrain exists, loading it from disk is much faster than generating it.
Server Software Matters
| Software | TPS Performance | |---|---| | Vanilla | Worst (no optimizations) | | Spigot | Better than Vanilla | | Paper | Much better (async chunks, optimized entity ticking) | | Purpur | Same as Paper with extra config options | | Pufferfish | Best (experimental optimizations on top of Paper) |
If you are running Vanilla or Spigot and have lag problems, switch to Paper. The migration is simple: replace the server JAR, keep your world and plugins. Paper includes dozens of built-in optimizations that Vanilla and Spigot lack.
The Optimization Checklist
Run through this list in order. Each step reduces TPS load:
- Switch to Paper (if not already using it)
- Set simulation-distance to 6
- Reduce mob spawn limits in bukkit.yml
- Slow down hopper transfer rate
- Pre-generate terrain with Chunky
- Profile with Spark and find slow plugins
- Merge item drops and XP orbs (Paper config)
- Set entity per-chunk save limits
- Disable unnecessary vanilla features (phantoms, wandering traders) if your players do not need them
When Optimization Is Not Enough
If you have optimized everything above and TPS still drops during peak hours, the problem is hardware. Minecraft's main loop is single-threaded. The only way to make it faster is a CPU with higher clock speed.
Space-Node servers run AMD Ryzen 9 3900X processors that boost up to 4.6 GHz. Combined with NVMe storage for fast chunk loading, this is the hardware foundation you need before any optimization even matters. Check the plans here.
