How to Diagnose & Fix TPS Drops on Minecraft Servers
Step-by-step guide to diagnosing and fixing TPS drops on Minecraft servers, profiling with Spark, entity culling, tick analysis and Paper optimisation.
Understanding TPS
TPS stands for Ticks Per Second. A Minecraft server targets 20 TPS, meaning it processes one game tick every 50 milliseconds. When a tick takes longer than 50 ms, TPS drops below 20, and players experience lag: delayed block breaks, slow mob movement, rubber-banding. A reliable minecraft tps drops fix requires finding which tick operations are too slow.
Use /spark tps to view current TPS, or /tps for the built-in approximation. Spark is far more accurate and also shows tick duration percentiles.
Step 1: Profile with Spark
Install Spark on your server. Run:
/spark profiler start --thread server
# Wait 5-10 minutes during peak load
/spark profiler stop
The generated report shows a flame graph of server thread activity. Expand the top-level nodes to find which subsystem consumes the most tick time. Common culprits:
- Entity ticking: Mobs, items, armor stands processing AI and physics.
- Chunk loading/generation: Generating new terrain is extremely expensive.
- Plugin listeners: Event handlers that run expensive logic on every tick or event.
- Tile entity ticking: Hoppers, furnaces, beacons, each ticks every server tick.
Step 2: Monitor Tick Duration
Run /spark tickmonitor --threshold 50. This alerts you every time a tick exceeds 50 ms and shows what caused the spike. Leave it running during gameplay and note patterns: do spikes happen during mob farms, chunk exploration, or specific plugin commands?
Step 3: Fix Entity-Related TPS Drops
Entities are the most common cause of TPS drops. Paper provides extensive entity tuning in paper-world-defaults.yml:
spawn-limits:
monsters: 50
animals: 8
water-animals: 3
water-ambient: 5
ambient: 1
entity-per-chunk-save-limit:
arrow: 16
ender_pearl: 8
experience_orb: 16
fireball: 8
small_fireball: 8
snowball: 8
tick-rates:
behavior:
villager:
validatenearbypoi: 60
sensor:
villager:
secondarypoisensor: 80
Villagers are especially expensive because of their complex AI (job site validation, pathfinding, gossip). Increasing villager tick rates or using a plugin like VillagerOptimiser can dramatically reduce their CPU cost.
Step 4: Fix Chunk-Related TPS Drops
If the Spark profiler shows chunk generation or loading as a major consumer:
- Pre-generate with Chunky:
/chunky radius 5000then/chunky start. - Lower
simulation-distanceinserver.properties. - Paper's async chunk loading helps, but generating new chunks is always CPU-intensive.
Step 5: Fix Hopper and Redstone TPS Drops
Hoppers are checked every tick and fire inventory move events. In paper-world-defaults.yml:
hopper:
disable-move-event: true
cooldown-when-full: true
For redstone, switch to Paper's alternate current implementation:
redstone-implementation: alternate-current
This is a complete rewrite of the redstone engine that is significantly faster than vanilla while maintaining identical behaviour for most circuits.
Step 6: Plugin Audit
If Spark shows plugin methods in the hot path:
- Identify the plugin from the class name in the flame graph.
- Check if an update exists that fixes the performance issue.
- Disable the plugin and confirm TPS improves.
- Consider replacing it with a lighter alternative.
The minecraft tps drops fix is iterative, profile, change one thing, profile again. Never change multiple settings at once or you will not know what helped.
For lag caused by network issues rather than tick performance, see our general lag fix guide. If TPS drops coincide with memory pressure, check the OOM guide.
Need reliable hosting that handles these issues out of the box? Astroworld Hosting runs optimised Paper servers on NVMe SSDs with 24/7 support.