TPS and MSPT explained: how to tell if your server is struggling
"My server is laggy" can mean five different things. Two numbers tell you which: TPS and MSPT. They are the heart rate of a Minecraft server, and once you can read them, you can tell a healthy server from a struggling one in seconds.
The tick
Minecraft runs on a loop. Each pass through the loop is called a tick, and in each tick the server moves mobs, updates redstone, grows crops, handles players and saves some data. A healthy server aims for 20 ticks per second.
That gives each tick a budget of 50 milliseconds, because 1,000 milliseconds divided by 20 is 50. If the work for a tick finishes in less than that, the server waits out the rest of the 50 ms. If it takes longer, the next tick starts late, and the game slows down.
TPS: ticks per second
TPS counts how many ticks the server completes each second.
- 20 TPS is perfect, and it is also the maximum. The server never runs faster than 20.
- 18 to 19.9 is fine, and players will rarely notice.
- 15 to 18 shows mild slowdown. Mobs lag and blocks feel delayed.
- Below 15 is clearly laggy. Below 10, the game feels broken.
In Paper, the /tps command shows the average over the last 1, 5 and 15 minutes. The spark plugin offers /spark tps with similar information. Look at all three. A low 1-minute number with a normal 15-minute number means a recent spike, while all three being low means a lasting problem.
MSPT: milliseconds per tick
MSPT is the time each tick actually took, in milliseconds. It is the more useful number, because it shows how close you are to the limit before problems show up.
| MSPT | Meaning |
|---|---|
| Under 25 | Lots of headroom |
| 25 to 40 | Healthy but busy |
| 40 to 50 | Close to the limit. A spike will cause lag. |
| Over 50 | The server cannot keep up, and TPS drops |
A server can sit at 20 TPS while its MSPT creeps up to 45. It looks fine until one extra farm or player pushes it over, and then it falls over quickly. Watching MSPT lets you act before players complain.
Paper has /mspt, and spark reports it too, often as minimum, median, 95th percentile and maximum. The 95th percentile matters most, because it shows how bad the worst moments are.
Why TPS and ping are different
Ping is the time for a message to travel between a player and the server. TPS is the server's own speed. A server can have perfect TPS and still feel laggy to a distant player because of high ping, and a nearby player can have low ping on a server with terrible TPS.
- High ping, good TPS. The distance or the player's connection is the problem. Everyone's blocks move smoothly except theirs.
- Low ping, bad TPS. Everyone experiences delayed blocks, rubber-banding mobs and slow farms.
Knowing which you have decides where to look. For TPS problems, look at the server. For ping, look at location and the player's network. How to fix server lag takes it further.
What lowers TPS
The usual suspects, in rough order:
- Too much view and simulation distance.
- Too many entities, such as huge mob farms or piles of items.
- A plugin or mod doing heavy work every tick.
- New chunks being generated while players explore. See How to pregenerate your world with Chunky.
- Weak CPU performance, especially single-thread speed, because the main game loop runs on one thread.
- Memory pressure, which causes long pauses while Java clears space.
Finding the cause with spark
Run a profile during the lag:
/spark profiler start
/spark profiler stop
The report is a web page that breaks down which parts of the server took the time. A plugin that uses 40% of the tick stands out immediately. Without a profile, you are guessing.
What to do with the numbers
- MSPT is fine, TPS is fine, but players complain. Check ping and their own connections.
- MSPT trending upward as players join. The server is nearing its capacity. Tune settings, as in How to tune Paper and Spigot settings, or consider a larger plan.
- Sudden dips at regular intervals. Often autosaves, backups or a scheduled task. Move them to quiet hours.
- Memory graph at its limit. See Minecraft server out of memory.
Write down your numbers when the server is healthy. A baseline makes problems obvious later.
Still stuck? Open a ticket on Discord - run /ticket in any channel, pick a department, and include your Server ID or Invoice ID so we can jump straight in.