TPS, MSPT and lag: what the numbers really mean
TPS stands for ticks per second and is the heartbeat of your Minecraft server: at 20 TPS the server works through the whole world twenty times a second, and higher than 20 is not possible. MSPT is the number of milliseconds a single tick costs; under 50 ms is healthy, because 20 ticks of 50 ms fit exactly into one second. If your TPS drops below 20, that is not a cause but a consequence: the MSPT has already gone past 50 ms. Which is why you steer by MSPT and not by TPS.
What is a tick and why is 50 ms the limit?
A tick is one complete pass over the server world. In that pass every mob moves, redstone is calculated, crops grow, items fall, chunks are loaded and unloaded, and every plugin or mod runs its own code. Only when all that work is finished does the next tick begin.
The server schedules twenty of those passes per second. A second contains 1000 milliseconds, so each tick gets a budget of 50 ms. If a tick finishes early, the server waits out the rest of that budget. If it runs long, the next tick starts late and the world falls behind the clock. That falling behind is what players experience as lag: blocks that pop back after you break them, mobs in slow motion, a chest that only opens a second later.
Anything under 50 ms means the server is finishing its work on time, but there is a world of difference between 12 ms and 45 ms while both report a tidy 20.0 TPS. At 12 ms you have more than three times the headroom you need. At 45 ms, a mob farm filling up or a backup job is enough to tip you over. Look beyond the average too: 20 ms with spikes of 120 ms feels worse than a steady 35 ms with no outliers. That is why spark shows percentiles, and the 95th tells you how bad your worst ticks really are.
Why does MSPT warn you earlier than TPS?
Because TPS has a ceiling and MSPT does not. Twenty is the maximum, so TPS can only go down, and it only does that once the server genuinely cannot hit its ticks any more. A server that creeps from 15 ms to 30 ms to 48 ms MSPT over a period of weeks will report a neat 20.0 TPS that entire time. Only at 51 ms do you see the first TPS loss.
TPS, in other words, is a yes/no warning light and MSPT is the fuel gauge. Anyone who only acts once the TPS drops has spent weeks growing into the problem without noticing a thing. Write down your MSPT weekly and you will see the trend coming.
What is the difference between TPS, FPS and ping?
Three numbers, three places where things can go wrong. Players call all three of them "lag", while the fix is different every time.
- TPS and MSPT live on the server and say how quickly the processor gets through the world's work. This is the one you as an owner can do something about.
- FPS is frames per second on the player's own computer: graphics card, shaders, resource packs and render distance in the client. The server has no influence on it.
- Ping is the network in between: the round trip time of a packet. Distance to the data centre, wifi and packet loss decide that number.
A handy yardstick: because a tick lasts 50 ms, a ping that stays comfortably below that disappears into the noise. Once the ping becomes a multiple of it, clicks and movement visibly lag behind, even at a perfect 20 TPS. Server location is the only real lever here; we run our own hardware in Hengelo, Frankfurt, Warsaw and North America.
How do you tell which of the three is the problem?
Start with the symptom, not with whichever number you happen to have open.
| Symptom | Likely cause | First check |
|---|---|---|
| Blocks break and come back, chests respond slowly | Server is missing ticks, MSPT above 50 | /tps or /spark tps, look at the MSPT |
| The picture stutters, but chat and blocks respond instantly | FPS on the player's computer | F3 in the client, check fps and render distance |
| You walk smoothly but keep getting pulled back | High ping or packet loss | Ping in the server list, test wired instead of wifi |
| Only slow during the busiest hours | Not enough CPU headroom at peak | Run the spark profiler during that peak, not after it |
| Slow after a few hours, fine again after a restart | Entity build-up or memory pressure with GC pauses | Entity count per chunk and RAM usage before the restart |
| A brief half-second hiccup every few minutes | World saving or a backup job | Line MSPT spikes up against save interval and backup times |
What causes low TPS most often?
In practice it almost always comes from four corners. Entities top the list: mob farms filling up, hundreds of loose items on the ground, stray boats and minecarts. Every entity costs processing time in every tick it is loaded for. Redstone and automation come next, especially clocks that tick away permanently. Chunk loading is the third: a view distance or simulation distance set too high multiplies the work per player, and anyone exploring new terrain forces the server to generate world while the clock keeps running. Heavy plugins or mods round out the list.
Too little memory is a category of its own. If the JVM is structurally short of RAM, the garbage collector runs more often and for longer, and you see that as MSPT spikes with no obvious culprit. With heavy modpacks that happens fast: All the Mods 10 on NeoForge and Minecraft 1.21.1 asks for at least 10 GB, roughly 12 GB for a small group and 14 to 16 GB with five or more players. If a modpack like that is running on your server, check you are on Java 21 as well, because Java 17 will not start All the Mods 10. FerriteCore saves around 30 to 40 percent memory; Canary and ModernFix are common companions. The settings for each cause are worked out in our article on optimising your Minecraft server and reducing lag.
How do you measure it with spark?
spark is the standard tool for performance profiling and runs on Paper, Purpur, Fabric, Forge and NeoForge, so there is no need to switch server software. There is a good reason it appears in every serious list of essential Minecraft plugins.
- Install spark as a plugin or mod and restart the server completely.
- Run
/spark tpsfor TPS and MSPT with percentiles, and note what you see while things are quiet. Without a baseline you will not know later what looks off. - Start
/spark profiler startat the moment the complaints are happening. A profile of a quiet server tells you nothing. - Let the profiler run for a few minutes and finish with
/spark profiler stop. You get a link to a report in your browser. - Read that report from top to bottom and follow the thickest branch. That is where you see what is eating most of the tick.
Use /spark health alongside it for memory and disk space. If what you mostly see is long garbage collector pauses, memory or Java configuration is your trail.
When does a bigger package not help?
Let us be honest: more RAM does not fix low TPS if the server is not short of memory. The Minecraft tick loop leans heavily on a single processor core, so what counts is how fast that core is. If your MSPT is high because of a redstone clock or a mob farm, it stays just as expensive on a bigger package. Clean up first, measure again, and only then scale.
Where hardware does make a difference is with slow storage and weak cores. An SSD brings the load time of All the Mods 10 down from more than ten minutes on an HDD to two or three minutes. Our budget line runs on AMD EPYC 7443P and the premium line on AMD Ryzen 9 9950X, both with NVMe SSD; you can see what that costs at Minecraft hosting from MC-Node. If the problem lies with FPS or ping, a bigger package buys you nothing.
Frequently asked questions
What counts as a good TPS value? 20 is the maximum and at the same time the only value that means your server is on schedule. Anything below it means ticks are being missed and the world is running behind the clock. Always check the MSPT alongside it: 20 TPS at 12 ms is healthy, 20 TPS at 45 ms is right up against the 50 ms limit.
Can TPS go above 20? No. The server schedules exactly 20 ticks per second and waits if a tick finishes early, so 20 is a hard ceiling. After a lag spike a server can catch ticks up, but the counter never climbs above 20 while doing so.
My FPS is low while the server holds 20 TPS, now what? Then it is your own computer or client settings, not the server. Lower your render distance, turn shaders off and consider a performance-focused client modpack such as Fabulously Optimized, which runs on Fabric with Sodium and Lithium and has well over 12 million downloads on Modrinth.
Does more RAM help against low TPS? Only if you genuinely had too little. With a heavy modpack like All the Mods 10 that is realistic, because it asks for at least 10 GB and 14 to 16 GB with five or more players. On a Paper server with enough memory you do not solve low TPS with gigabytes, but with fewer entities and faster processor cores.
Why do I have lag when my ping is low? Ping only measures how long your packets take across the network, not how quickly the server works through the world. If the MSPT is above 50 ms, your packets arrive perfectly promptly at a server that answers too late. Run /spark tps to rule that out in a couple of seconds.