
MSPT vs TPS
TPS tells you how many ticks your server completes per second. MSPT tells you how long each tick takes. TPS is the symptom. MSPT is the cause.
A server with 20 TPS and 45ms MSPT is close to its limit. A server with 20 TPS and 12ms MSPT has plenty of headroom. Both show 20 TPS, but one is about to fall apart under any additional load.
The relationship is simple:
- MSPT below 50ms = 20 TPS (smooth)
- MSPT at 50ms = 20 TPS (at the edge)
- MSPT between 50 and 60ms = TPS dips to 18-20 (playable but not perfect)
- MSPT above 60ms = TPS drops below 18 (noticeable lag)
- MSPT at 100ms+ = 10 TPS or less (rubber-banding, delayed blocks, slow mobs)
How to Check MSPT
In-game command
Press F3 on Java Edition. The debug screen shows MSPT in the bottom-left area labeled "ms ticks." On 1.20+, it displays min/avg/max values.
Spark profiler
Install the Spark plugin on your server. Run /spark tps to see TPS and MSPT together. Run /spark profiler start to record a detailed breakdown of what is consuming tick time.
Spark is the standard tool for server performance analysis. It works on Paper, Purpur, Fabric, Forge, and NeoForge. Here are the most useful commands:
/spark tps
/spark health
/spark profiler start --timeout 60
/spark profiler open
Look for the average MSPT and the worst tick spikes. If a plugin, mod, entity type, or block entity dominates the profile, you have a clear target to fix.
Timings report (Paper/Purpur)
Run /timings on, wait 5 minutes, then /timings paste. This gives a web-based report showing which tasks eat the most tick time. Spark has largely replaced Timings as the preferred tool.
What Causes High MSPT
Entities
Mob farms, animal pens, villager trading halls, and item drops on the ground are the biggest tick consumers. Each loaded entity runs AI pathfinding calculations every tick. A farm with 200 cows in one chunk will spike MSPT.
Fix: Set entity limits in bukkit.yml or paper-global.yml. Use spawn-limits to cap hostile and passive mobs. Kill excess entities with /kill @e[type=item].
Chunk loading
When players explore new terrain, the server generates chunks. Worldgen is CPU-heavy. Multiple players exploring in different directions at the same time will spike MSPT. High simulation distance also means more chunks ticking around each player, which adds up fast.
Fix: Pre-generate your world with Chunky. Set view-distance to 8-10 instead of the default. Set simulation-distance to 4-6. Always lower simulation distance before reducing render distance, since simulation distance has a much bigger impact on MSPT.
Redstone
Large redstone circuits with clocks, piston doors, or sorting systems process every tick. A single 0-tick redstone clock updates hundreds of blocks per second.
Fix: Limit redstone updates in paper-global.yml. Consider banning 0-tick designs on public servers.
Plugins and mods
Poorly written plugins that run heavy tasks on the main thread will block ticks. Database queries, file I/O, and HTTP requests inside tick handlers are common offenders. Modpacks can add machines, dimensions, custom AI, pipes, and tile entities that keep ticking constantly, all adding to MSPT even when no player is nearby.
Fix: Use Spark to identify which plugin or mod consumes the most tick time. Update or replace laggy plugins. Ask plugin developers to move heavy work to async threads.
Hoppers
Hoppers check for items above them every tick. A storage system with 500 hoppers creates thousands of item lookups per second.
Fix: Use hopper.disable-move-event: true in paper-global.yml if your plugins allow it. Replace hopper chains with water streams where possible.
Garbage collection
If the JVM pauses to clean up memory, MSPT will spike during the pause. Short, frequent GC pauses add up, and long stop-the-world pauses can freeze ticks entirely. This is where good Java flags and enough allocated RAM make a real difference.
Fix: Use Aikar's recommended JVM flags for G1GC tuning. Make sure your server has enough heap memory so the garbage collector is not running constantly. For heavily modded servers, consider ZGC as an alternative collector.
Target MSPT Values
| Server type | Target MSPT | Notes |
|---|---|---|
| Vanilla 1-5 players | 5-15ms | Light load |
| Vanilla 10-20 players | 15-30ms | Normal |
| Modded (100+ mods) | 25-40ms | Acceptable |
| Heavy modpack (ATM10) | 35-48ms | Close to limit |
| Above 50ms | Lag | Fix needed |
For a public server, aim for under 35ms average MSPT so you have headroom for spikes during peak hours. For a private SMP with friends, under 45ms is usually comfortable enough. Large modpacks will spike above these numbers, but they should not sit above 50ms constantly.
Quick Optimization Checklist
- Install Spark and profile your server
- Pre-generate your world with Chunky
- Lower view-distance to 8 and simulation-distance to 5
- Set entity spawn limits in bukkit.yml
- Check hopper counts and reduce where possible
- Update Paper/Purpur to latest build
- Use Aikar's JVM flags for garbage collection
- Remove or replace plugins that Spark flags as slow
- On Fabric servers, add performance mods like Lithium and FerriteCore
- Move to faster CPU hardware if the main thread is consistently maxed out
Hardware Matters
MSPT is heavily tied to single-thread CPU performance. Minecraft runs its main game loop on one core. A Ryzen 9 9950X with its high boost clock will give you lower MSPT than a cheaper CPU at the same player count. A host can give you plenty of RAM but still put you on weak or oversold CPU, which produces bad MSPT even when memory usage looks fine.
NVMe storage also helps during chunk generation and world saves. Slow disks cause tick spikes during autosaves.
Space-Node uses AMD Ryzen 9 processors with NVMe SSDs and dedicated resources, not shared cores. Whether you are running a Minecraft server or a FiveM server, low tick times start with proper hardware. Start a Minecraft server from €0.90/GB per month and keep your MSPT low from day one.