Tick rate (TPS) is the single most important performance metric for a Minecraft server. Vanilla aims for 20 TPS. Anything under 18 feels laggy to players — mobs walk weird, blocks lag when you place them, your buddy's pickaxe swings into thin air.
When TPS drops, the advice you usually get online is "add more RAM" or "switch to Paper." Sometimes that's right. Often it's not. Here's the actual decision tree.
Step 1: Figure out what's actually happening
Before fixing anything, run a profile. The tools depend on your setup:
- Forge / NeoForge:
/forge tpsshows the rolling 5/15/60-second TPS per dimension - Fabric:
/spark tps(after installing Spark — should be on every server) - Paper / Spigot:
/spark profiler --timeout 30runs a 30-second profile and outputs a flame graph URL
Run the profile during the lag, not after. The output tells you which mod, which entity, or which dimension is eating ticks.
If you don't have Spark installed, install Spark. It's the single most useful Minecraft server admin tool, free, runs on every loader. Don't troubleshoot TPS without it.
The five real causes (in order of frequency)
1. Single CPU thread is saturated
The most common cause, by far. Minecraft's main game loop is single-threaded. Every tick of every entity, every block update, every player action runs on one CPU thread. If that thread maxes out, TPS drops — regardless of how much RAM you have or how many cores your CPU has.
How to identify: Spark profile shows long ticks in MinecraftServer#runServer or specific mod logic. CPU load is high on one core, idle on others.
Real fixes:
- Faster CPU (clock speed matters — Ryzen 9950X at 5.7 GHz beats a 5-year-old Xeon at 3.0 GHz by a lot)
- Reduce entity counts (fewer mobs, fewer items, fewer auto-farms running 24/7)
- For Forge: check Spark for specific mods that hog ticks. Common offenders: Mekanism reactor sim, Refined Storage networks
- For Paper: enable async chunks if your version supports it
Don't: Throw more RAM at it. Single-thread saturation isn't a memory problem.
2. Chunk loading is too slow
Chunks load when players move into new territory or teleport. If your server's storage can't keep up, the player waits for the chunk — and if a tick is mid-flight, TPS drops while the chunk system blocks.
How to identify: Lag spikes when players move fast (elytra, /tp, dimension-cross). Otherwise smooth.
Real fixes:
- NVMe SSD (7 GB/s) instead of SATA SSD (500 MB/s) or HDD
- Pre-generate world borders with WorldBorder fill or Chunky
- Reduce view distance (8–10 chunks server-side is plenty for most modpacks)
- Increase pre-cached chunk count if your loader supports it
Don't: Add RAM. The chunks live on disk; the bottleneck is read speed.
3. RAM saturation triggering GC pauses
When RAM fills up, Java's garbage collector runs. Long GC pauses freeze the server — that's a real TPS hit. But people over-attribute TPS issues to RAM.
How to identify: Spark profile shows long pauses in GC stages. Heap usage is consistently above 80–90%.
Real fixes:
- Add RAM (this is the case where adding RAM actually helps)
- Use Aikar's flags for modded packs (G1GC tuned for Minecraft GC patterns)
- For Forge: check that your mods aren't leaking entities or chunks
- Pre-load common chunks to spread allocation pressure
Don't: Just blindly add RAM until it works. If your heap is at 50% and you add more, the issue isn't memory.
4. A specific mod is misbehaving
Some mods are TPS killers under specific conditions. Refined Storage networks with thousands of items, Mekanism digital miners running on the same chunk, Botania mana flow loops, Thaumcraft research nodes that cascade.
How to identify: Spark profile names a specific mod or mod method consuming most of the tick.
Real fixes:
- Update the mod (often the patch notes mention performance fixes)
- Configure the mod (most heavy mods have config files for limiting expensive operations)
- Replace the mod with a lighter alternative (e.g., Refined Storage → AE2 in many cases)
- Quarantine the offender to a separate dimension
Don't: Add hardware. Hardware doesn't fix bad mod logic.
5. Network or disk I/O is blocking
Less common but real. Sometimes a slow backup, a network hiccup, or another process on a shared box is pausing your server's I/O.
How to identify: Spark shows pauses in I/O-related work, or TPS drops correlate with backup schedule, or a neighbor on a shared box is eating resources.
Real fixes:
- Move backups to off-peak hours
- Run backups via copy-on-write snapshots (zero-overhead)
- If on a shared host, switch to a less-oversold provider
What we run for TPS-friendly hosting
This is the part where we plug ourselves, but it's relevant to the troubleshooting flow. Lagless runs:
- AMD Ryzen 9950X (5.7 GHz boost) — fastest single-thread clock you can get on a server CPU
- DDR5-6000 ECC RAM — fast memory + corruption protection for long-running worlds
- NVMe Gen 4 (7 GB/s) — chunk loads invisible
- Sane density — we don't pack 50 servers on a box. Your neighbors aren't tanking your TPS.
If you've worked through the troubleshooting steps above and your TPS is still bad, you're probably on a host that oversells. The fix is changing hosts, not changing your server.
TL;DR
- Always profile with Spark before fixing
- Most TPS drops are single-thread CPU saturation, not RAM
- Slow chunks = NVMe issue
- RAM only helps if your heap is genuinely full
- Sometimes it's just a bad mod
- Sometimes it's just a bad host


