What TPS and MSPT Actually Measure, and When Each One Matters
TPS and MSPT measure related things but answer different questions. Here's what each one actually tells you, and why 20 TPS can still feel awful.
ChunkPod Team · · 7 min read
What TPS and MSPT Actually Measure, and When Each One Matters
You check /tps on a Minecraft server, see a clean 20.0, and open Discord to find three people complaining about lag. The green number and the player experience don't match, and that gap is where TPS alone stops telling you the truth.
TPS and MSPT measure related things, but they answer different questions. Getting them straight is the difference between fixing lag and staring at a healthy-looking dashboard while your players quit.
What a tick actually is
A Minecraft server runs the world in ticks. One tick is one step forward: mobs update their AI, blocks check their state, water flows a little, hoppers move an item, players get their position and inventory reconciled, redstone reacts. The target is 20 ticks a second, and the server has 50 milliseconds to do everything a tick needs before the next one is due.
If it finishes in less than 50ms, it waits. If it takes longer, everything downstream starts to fall behind. That's the whole game loop in one sentence, and both numbers you care about are describing pieces of it.
What TPS actually measures
TPS stands for ticks per second. It's a rate: how many ticks the server managed to complete over some recent window. Most tools show it as a rolling average across 1, 5 and 15 minute windows.
The important thing is what TPS can and can't do. It's capped at 20. There's no such thing as 22 TPS or 30 TPS on a Minecraft server, because 20 is the target and the server will happily idle after each tick to keep it there. If you ever see a number above 20 reported somewhere, you're looking at a display artifact or a different metric entirely.
TPS drops below 20 when the server can't fit 20 ticks into a second. That means at least some ticks took longer than 50ms, and the server couldn't catch up. So TPS below 20 is a symptom, not a cause. It tells you that ticks are too slow, without telling you which ones or how often.
What MSPT actually measures
MSPT is milliseconds per tick. It's the time a single tick actually took to process. As long as MSPT stays under 50, the server has slack: it finishes the work, waits out the remainder, and starts the next tick on schedule.
The relationship between the two is simple. If MSPT is 15, TPS is 20 with headroom. If MSPT drifts up to 30 or 40, TPS is still 20 but the server is closer to the ceiling. If MSPT crosses 50, TPS starts dropping, because the server can't produce 20 ticks in a second when each one takes longer than a twentieth of a second.
MSPT is the underlying quantity. TPS is what you see when MSPT gets bad enough on average to fall out the other side.
Why 20 TPS can still feel awful
This is where the two numbers stop lining up with what players feel.
TPS is an average over a window. That means a lot of quick, cheap ticks can hide a small number of very expensive ones. Say your server runs 15ms ticks all day, and then once every ten seconds a chunk loads on the edge of a player's view distance and one tick takes 250ms. The average is still fine. TPS might read 19.9. But every ten seconds, the world freezes for a quarter of a second, mobs stutter, arrows miss, and someone falls into lava because their hits didn't land.
Players don't feel the average. They feel the worst tick that happened in the last few seconds. A server with a smooth 40ms MSPT feels better than a server that averages 25ms but spikes to 200ms every few seconds, even if the second one reports a friendlier TPS.
That's why experienced admins reach for MSPT first when someone reports lag on a server that looks green. TPS answers "is the server keeping up on average?" MSPT, and especially the max and 95th percentile of MSPT, answers "how bad does it get?"
Reading MSPT properly
A single MSPT number doesn't say much. You want the distribution.
- Average MSPT tells you the baseline load. Is the server generally comfortable, or generally close to the ceiling?
- Median MSPT tells you what a typical tick looks like. If it's much lower than the average, you have skew: rare heavy ticks are pulling the mean up.
- 95th percentile MSPT is the number to pay attention to. It says "one in twenty ticks is at least this bad." If that's over 50, players are feeling it three times a second on average.
- Max MSPT is the worst tick in the window. Useful for spotting one-off spikes from chunk generation, plugin startup work or a redstone contraption firing.
If you only ever look at TPS, all of this is invisible.
What actually causes long ticks
Ticks get expensive when a lot of work piles into a single frame of the game loop. Common culprits, in rough order of how often they show up:
- Chunk loading and world generation. Generating a new chunk on the main thread is one of the most expensive things a Minecraft server does. Players riding elytra over unexplored terrain are basically running a stress test.
- Entity load. Mobs, item frames, armor stands, dropped items and projectiles all cost time to tick. A farm with 200 pigs in a small area, or a chunk full of dropped items from a dead player, will show up in MSPT.
- Redstone. Complex contraptions, especially ones with many block updates per tick, can eat MSPT quickly. Piston-heavy machines are a classic offender.
- Hoppers. They tick often and check inventories. A wall of hoppers in a sorting system is a hidden tax.
- Plugins scheduling work on the main thread. A badly written plugin that does a database query or a filesystem scan inside a tick handler is going to show up as a spike.
Not all of these hurt the average. Several, especially chunk loading and one-shot redstone events, hurt the max and the tail instead.
What to actually watch
If you take one thing away from all of this, it's the order in which to look at your numbers when someone says the server is laggy.
- Check TPS first, across all three windows. If any window is below 20, you have a sustained problem.
- Regardless of TPS, look at MSPT. Look at the average, the 95th percentile and the max.
- If max MSPT is well above 50 while the average looks fine, you have spikes. TPS was lying to you.
- Match the spikes to what's happening on the server. A profiler like spark, the /tps command on Paper, or the /tick command that Minecraft 1.21 added, will tell you which systems ate the time.
Server lag isn't the whole story either. Client frame rate and network latency both feel like "lag" to a player, and both are independent of TPS and MSPT. A server at 20 TPS with 8ms ticks can still feel laggy to a player on a bad wifi connection. Worth ruling out before you start tuning JVM flags.
Two numbers, two questions
TPS is the health check. MSPT is the diagnostic. TPS tells you whether the server is broadly keeping up. MSPT tells you where the strain lives and how bad the worst moments get. When they disagree with each other, or with your players, MSPT is almost always closer to the truth.
If you're setting up monitoring for a server you care about, log both. Alert on TPS below some threshold and on 95th percentile MSPT above one. Averages will lie to you. Percentiles won't.
ChunkPod is in early access. If you're running a server and want to be notified when hosting opens, you can join the waitlist at chunkpod.com. For picking startup flags that give the JVM enough room to keep MSPT down, the JVM Arguments Generator at chunkpod.com/tools is free and needs no account.