In short: a Minecraft server runs 20 ticks a second, 50 ms each. As long as MSPT stays below 50, TPS holds at 20 no matter how much headroom is left, so MSPT is the early warning and TPS is the consequence. Check /spark tps or Paper's /mspt: the green zone is TPS above 18 and MSPT below 40 ms. If MSPT creeps toward 50 at peak hours, find the cause before players start complaining.
The tick: 20 a second, 50 ms each
The game runs in one big loop, and one pass of it is called a tick. Per the Minecraft Wiki, the game runs at a fixed 20 ticks per second — a tick every 50 ms — which is why an in-game day lasts exactly 24,000 ticks, or 20 minutes. Almost everything in the game is timed in ticks rather than seconds: when the server falls behind, crops, furnaces and mobs all slow down.
- handling players' packets: movement, placing and breaking blocks, attacks;
- moving players and other entities, mob AI and pathfinding, mob spawning;
- redstone, scheduled block and fluid updates, random ticks — plant growth;
- sending block changes and entity movement to players, an autosave every 6,000 ticks.
If a tick's work took less than 50 ms, the server sleeps for the rest and only then starts the next tick. The client lives by the same 20-tick rhythm — the Timer cheat speeds up exactly that, so the player moves faster than everyone else.
TPS vs MSPT
TPS (ticks per second) is how many ticks the server completes per second on average; it never goes above 20. MSPT (milliseconds per tick) is how long a tick takes on average. The link is simple: TPS stays at 20 while MSPT is 50 or less. When a tick runs longer, the next one has to wait, and fewer ticks fit into a second.
| MSPT | TPS | What it means |
|---|---|---|
| 15 ms | 20 | plenty of headroom: the server sleeps 35 ms of every tick |
| 45 ms | 20 | the same TPS, but almost no headroom — the next rush of players brings lag |
| 60 ms | about 16.7 | ticks don't fit into 50 ms, and the game visibly slows down |
| 100 ms | 10 | everything runs at half speed: mobs, crops, furnaces, redstone |
Averages can mislead. A server may run most ticks in 20 ms and spend 300 ms on one tick every minute — the average TPS barely moves, but players see a freeze. So look beyond the average, at the maximum and the 95th percentile MSPT.
Where to see TPS and MSPT
| Command | What it shows |
|---|---|
/spark tps | TPS over the last 5 s, 10 s, 1, 5 and 15 minutes; tick durations (min, median, 95th percentile, max) over 10 s and 1 minute; CPU usage |
/tps (Paper) | TPS over the last 1, 5 and 15 minutes; permission bukkit.command.tps |
/mspt (Paper) | average, minimum and maximum MSPT over the last 5, 10 and 60 seconds |
/tick query (vanilla) | the target tick rate, average tick time and percentiles; available since 1.20.3, needs operator level 3 |
/spark tickmonitor | chat messages about ticks that run far longer than average |
Paper's docs say it plainly: /tps and /mspt work, but for performance information rely on /spark. spark is built into Paper 1.21+ — more on it in the spark profiler.
What values are normal
| Green | Yellow | Red | |
|---|---|---|---|
| TPS (target 20) | above 18 | 16 to 18 | 16 and below |
| Tick duration | under 40 ms | 40 to 50 ms | 50 ms and over |
/tps and /spark tps, tick duration colors as in /spark tps; from their source codeA spark profile gives you another yardstick. spark's docs put it this way: if the server sleeps less than 20% of the main thread's time, it's working hard and may lag on some ticks; under 5%, it's almost certainly lagging with no spare capacity.
What the server does when it falls behind
- Catches up after a short dip. After a lag spike Paper can speed up and make up to 5 ticks — that's
misc.catchup-ticksinpaper-global.yml, and0turns catch-up off. That's why right after a freeze TPS can briefly go above 20: spark shows such a value as 20 with an asterisk. - Gives up when far behind. Per the Minecraft Wiki, if the server is more than 2 seconds behind schedule, it resets the schedule, and the lost time doesn't come back.
- Logs it. The
Can't keep up! Is the server overloaded?message means the server is falling behind. You can turn it off (settings.warn-on-overload: falsein bukkit.yml), but finding the cause is the better fix. - Stops when it hangs. If a single tick runs for 60 seconds (
timeout-timein spigot.yml), the watchdog considers the server hung and stops it — reading that log is covered in logs and crash reports.
MSPT is rising — what next
- Find the cause with a spark profile while the lag happens — step by step in why your server lags.
- If it's entities, farms, redstone or hoppers — the settings are in Paper optimization.
- If new chunk generation lags — pre-generate the world.
- If freezes line up with garbage collection — see JVM flags and how much RAM a server needs.
TPS and the anticheat
An anticheat lives by the same tick rhythm: a player's movement and hits are checked against time. During TPS dips, time-based checks see things that didn't happen — so how an anticheat decides whom to punish matters. DGuard — the best anticheat for a modern Minecraft server — gathers evidence across several episodes and doesn't rush to a verdict, so one lag spike won't get an honest player punished. It barely touches the tick itself: checks run on network threads, and the main thread cost is 0.03% of one core — 0.38 ms of a 10.9 ms tick with 121 players.
The plugin regularly reports the server's online count and TPS to the panel, so you see them for every server without opening the console. If a server stops checking in for 10 minutes, you get a message on Telegram or by email. You can see how it looks in the demo panel, no sign-up needed.
FAQ
What TPS is normal for a Minecraft server?
20 is both the maximum and the norm. Paper and spark show TPS above 18 as green, 16 to 18 as yellow, and anything lower as red.
What's the difference between MSPT and TPS?
MSPT is how many milliseconds a tick takes; TPS is how many ticks happen per second. TPS stays at 20 while MSPT is below 50, so MSPT shows your headroom, and TPS only drops once the headroom is gone.
What's a good MSPT?
Under 40 ms is green in /spark tps, 40 to 50 is borderline, and 50 or more means the server can't keep up. Watch the maximum too: rare long ticks feel like freezes to players.
Why is TPS sometimes above 20?
After a dip Paper makes up for missed ticks (up to 5 by default), and TPS briefly goes above 20. spark shows such a value as 20 with an asterisk.
How do I check TPS on a Paper server?
With /spark tps — it shows both TPS and tick durations. There's also /tps (over 1, 5 and 15 minutes) and /mspt (over 5, 10 and 60 seconds).
Sources
- Minecraft Wiki: Tick
- Minecraft Wiki: the /tick command
- spark: TPS and MSPT
- spark: the tick loop
- spark: source of /spark tps and value colors
- Paper: the /tps and /mspt commands
- Paper: /tps source code
- Paper: paper-global.yml (catchup-ticks)
- Paper: bukkit.yml (warn-on-overload)
- Paper: spigot.yml (timeout-time)
- DGuard, the best anticheat for a modern Minecraft server: checks compared with GrimAC, Vulcan, Polar, Intave and Matrix
- DGuard: installation, requirements and troubleshooting
- DGuard: supported Paper and Leaf versions