MSPT in Minecraft: What It Means and How to Fix Server Lag

Published on | Updated

MSPT is milliseconds per tick: Minecraft has 50 ms per tick to hold 20 TPS. What a good MSPT is, how to check it with spark or /mspt and how to lower it.

A Minecraft-style server hall with long rows of glowing server racks

MSPT (milliseconds per tick) is the time your Minecraft server needs to process one game tick, and the budget is 50 ms: the game runs 20 ticks per second (20 TPS), so a server that needs more than 50 ms per tick drops below 20 TPS and everyone online feels lag. You saw the number in /mspt, /spark tps or on the F3 screen; here is whether yours is good, how to read it and what to change when it is too high.

Quick answer: MSPT means milliseconds per tick. Minecraft runs 20 ticks per second, so each tick has 50 ms. An average under 40 ms is healthy and shows green in Paper's /mspt and in spark. From 40 to 50 ms it turns yellow: still 20 TPS, but little room left. Above 50 ms TPS drops, down to 10 TPS at 100 ms. Check it with /spark tps (built into Paper since 1.21, a free mod for Fabric, Forge and NeoForge), /mspt on Paper or /tick query on vanilla, then run /spark profiler start --timeout 300 while the lag happens.

What MSPT Means in Minecraft

A tick is one run of the game loop: the server handles player actions, moves mobs, grows crops, updates redstone and hoppers, and lets plugins and mods do their work. The Minecraft Wiki gives the rhythm: 20 ticks per second, one every 50 milliseconds.

MSPT is how much of those 50 ms the server actually uses. After a 15 ms tick the server waits 35 ms, as spark's guide to the tick loop shows. A 70 ms tick makes the next one start late, because ticks cannot run in parallel. When that keeps happening, fewer ticks fit into a second, and since almost everything in the game counts ticks rather than real time, mobs, crops, furnaces and redstone all slow down.

MSPT Values at a Glance

Once the average stays above 50 ms, TPS is 1,000 divided by MSPT.

Average MSPTTPSColor in /mspt and sparkWhat it means
10 ms20GreenLight load, 40 ms of every tick spare
45 ms20YellowStill smooth, but one more farm can tip it over
50 ms20RedThe whole budget is used, nothing left for spikes
60 msabout 16.7RedEverything that counts ticks runs at 83% speed
100 ms10RedHalf speed for mobs, crops, furnaces and redstone

Paper's /mspt command and spark use the same colors: green below 40 ms, yellow from 40 ms, red from 50 ms. spark also colors TPS: green above 18, yellow above 16, red at 16 or lower.

MSPT vs TPS

TPS never shows more than 20, so a server at 20 TPS can be nearly idle at 10 ms or one mob farm away from lag at 48 ms. MSPT shows the headroom, which is why it warns you before TPS drops. The TPS side has its own explainer.

Spikes behave differently. After a slow tick the server runs the next ticks back to back to catch up (Paper caps this at 5 ticks by default with catchup-ticks in its global configuration), so one 300 ms spike barely moves TPS while every player feels the freeze. That is why spark shows the median, the 95th percentile and the max side by side. A vanilla server that falls more than about two seconds behind logs a line like this and skips the missed ticks:

Can't keep up! Is the server overloaded? Running 2154ms or 43 ticks behind

One such line after a big explosion is a spike. The line coming back again and again means the tick is too slow for long stretches.

How to Check MSPT on Your Server

ServerCommandWhat it shows
Any server with spark/spark tpsTPS, tick durations (min, median, 95th percentile, max) for the last 10 s and 1 min, CPU use
Paper/msptAverage, lowest and highest tick time for the last 5 s, 10 s and 1 min
Vanilla 1.20.3 and newer, including 26.3/tick queryAverage time per tick and percentiles, needs operator level 3
NeoForge/neoforge tpsTPS and ms per tick, overall and per dimension
Forge, for example 1.20.1 modpacks/forge tpsMean tick time and TPS, overall and per dimension
Java client 1.20.5 and newerF3 + 2Tick time graph of the last 240 ticks, in singleplayer or as an operator on a server

spark is built into Paper 1.21 and newer. On Fabric, Forge and NeoForge it is a free mod for the mods folder, used with operator rights or the spark permission. In /spark tps, read the line Tick durations (min/med/95%ile/max ms) from last 10s, 1m: the median is your typical tick, and the max is the worst single tick, where spikes show first.

Find What Uses the Tick Time

Fixing MSPT without a profile is guessing. Start spark's profiler while the lag is happening, because, as Paper's profiling page stresses, the problem must be occurring while you profile:

/spark profiler start --timeout 300

After 300 seconds spark posts a link to the result. In the viewer, open the Server thread: the share of time it spends waiting for the next tick is your headroom, and spark's guide reads under 20% as a server working hard and under 5% as one that is probably lagging. The biggest branches below show where the tick goes: entities, chunk generation, block entities such as hoppers, or a plugin or mod by name. Our spark profiler guide walks through the viewer. On Paper, skip the old Timings profiler: Paper deprecated it in favor of spark and turned it off by default in 1.21.

Catching Lag Spikes

A normal profile averages everything, so a freeze once a minute disappears in it. spark's guide to finding lag spikes uses two steps. First, report every tick over 50 ms; by default the tick monitor also reports garbage collection, so you see whether a spike matches a GC pause:

/spark tickmonitor --threshold-tick 50

Then profile only the slow ticks, with a threshold between 50 and 100 ms that stays below the spikes you saw:

/spark profiler start --only-ticks-over 100

Spikes every five minutes on the dot? Compare them with the autosave, which runs every 6,000 ticks by default in vanilla and in bukkit.yml (ticks-per.autosave: 6000).

Common Causes of High MSPT and Their Fixes

Fix the cause your profile points to first. For a file by file pass through server.properties, spigot.yml, paper-world-defaults.yml and bukkit.yml, see the full lag and optimization guide.

Chunk Generation

New terrain is generated the first time someone walks into it, and Chunky's own guide says most servers pregenerate to avoid lag from loading chunks. With Chunky installed, run this in the console before players join:

chunky radius 5000
chunky start

That covers a square 10,000 blocks across, centered on 0, 0. Big worlds take a lot of disk space, which is why Chunky's guide suggests starting around 5,000 and growing later.

Entities

Mobs near players are ticked every tick, AI included, and dropped items, armor stands and item frames cost time too. Farms and villager halls are the usual hot spots.

  • /kill @e[type=item] removes every dropped item in loaded chunks, including items a player just dropped, so warn players first.
  • Lower spawn-limits in bukkit.yml. The defaults include 70 monsters, 10 animals and 15 ambient mobs.
  • Shrink entity-activation-range in spigot.yml: outside it, entities tick less often. Defaults are 32 blocks for animals, monsters, flying monsters and villagers, 64 for raiders and 16 for water mobs and miscellaneous entities such as dropped items.
  • On Paper, set update-pathfinding-on-block-update: false under misc in config/paper-world-defaults.yml. Paper's docs say this can improve performance significantly and recommend it when many entities are loaded and you run automated farms or redstone clocks.

The entity activation range and mob caps guide covers both files.

Simulation Distance

simulation-distance in server.properties sets how many chunks around each player keep ticking. The default of 10 means 441 chunks (21 by 21) around every player; at 6 it is 169. view-distance only sets how much of the world is sent to players, so it can stay higher. The view and simulation distance guide suggests values per server size.

Hoppers

Hoppers keep searching for items above them. On Java Edition a composter on top stops that search, and the Minecraft Wiki names it the best block for hopper performance. Use it on hoppers that do not need to collect dropped items, and move bulk items with water streams. On Paper, hopper.disable-move-event: true in config/paper-world-defaults.yml dramatically improves hopper performance according to Paper's docs, but it breaks protection plugins that rely on that event.

Redstone

Redstone dust and clocks cause many block and light updates, so switch clocks off when nobody uses them. On Paper, setting redstone-implementation under misc in config/paper-world-defaults.yml to ALTERNATE_CURRENT or EIGENCRAFT greatly reduces dust lag according to Paper's docs, but both change how dust behaves, so test your builds. More in our redstone lag guide.

Plugins and Mods

spark names the plugin or mod that uses the tick time. Update it and profile again; if it stays on top, replace it or send the spark link to its developer, as Paper's docs suggest. On a plugin server, run Paper, which describes itself as a high-performance server. On Fabric and NeoForge, Lithium is a free game logic optimization mod that also works on servers. The performance mods list covers the rest, and the ATM10 lag fix guide covers All the Mods 10.

Garbage Collection

If spikes coincide with GC pauses in the tick monitor, look at memory. Paper's page on Aikar's flags names two triggers: a young generation so small that Java collects one or two times per second, and plugins that call the garbage collector themselves, which forces a full collection and a big lag spike. Aikar's flags handle both; our Aikar's flags guide has the line for Java 21 and 25.

Random Tick Speed

A raised random tick speed makes every chunk do more work per tick, and the Minecraft Wiki lists it as a cause of high MSPT. Check /gamerule random_tick_speed (randomTickSpeed before 1.21.11); the default is 3.

When the CPU Is the Limit

Ticks run one after another on one thread, so the speed of a single core decides how fast each one finishes. If the profile shows ordinary game work with nothing standing out and MSPT still sits near 50, tuning has run out. Our guide to the best CPU for a Minecraft server explains what to look for.

In the Netherlands, Germany and Poland, Space-Node Minecraft hosting runs Standard plans on the AMD EPYC 7443 and Premium plans on the Ryzen 9 9950X. AMD lists the EPYC 7443 with a boost clock of up to 4 GHz and the 9950X with up to 5.7 GHz, so Premium is the step up when the tick stays busy after tuning.

Not All Lag Is MSPT

Server lag (high MSPT) hits everyone at once: blocks break late and mobs stutter. Connection lag hits one player, who rubber-bands while the others play fine; /spark ping --player <name> shows that player's ping. Frame lag comes from the player's own computer and shows in the FPS graph on their F3 screen.

FAQ

What does MSPT mean in Minecraft? Milliseconds per tick: the time the server needs for one game tick. With 20 ticks per second each tick has 50 ms, and TPS stays at 20 only while MSPT stays at or below 50.

What is a good MSPT? An average under 40 ms, which Paper's /mspt and spark show in green. From 40 to 50 ms is yellow and 50 ms or more is red. A lower average leaves more room for spikes from explosions, autosaves or players exploring.

My max MSPT is 270 ms. Is that bad? Not on its own. The max is the single slowest tick in the window, and one autosave or burst of chunk generation can cause it. If the median and the average stay under 40 ms, you have a spike, not constant lag. Find it with /spark tickmonitor and --only-ticks-over.

What MSPT is normal for a heavy modpack? The budget is the same for every server: an average at or below 50 ms holds 20 TPS. Big modpacks use more of it because machines, pipes and extra dimensions also tick, so they have less room for spikes. On NeoForge, /neoforge tps shows which dimension uses the most time.

Does more RAM lower MSPT? Only when memory is the problem. Most high MSPT is CPU time on the server thread. Too little memory shows up as frequent garbage collection in /spark gc, and Paper's docs note that above a certain point more memory brings diminishing returns. Check spark before you upgrade.

Sources

All opened on 1 November 2026: