Comprendre et stabiliser le TPS d'un serveur Minecraft
Par Benjamin Dayan · PDG
· Mis à jour le October 2, 2026 · Lecture 7 min
Contents
Minecraft server TPS is the one metric every admin eventually has to learn to read properly, because it is the difference between a world that feels responsive and one where mobs teleport, redstone misfires, and players rubber-band across chunks. Ticks per second should sit at 20, but they rarely stay there once real players, farms, and mods pile onto a world. This guide breaks down the tick loop itself, how to read timing reports correctly, and which factors actually push tick duration past the danger line.
Minecraft Server TPS Explained: The Tick Loop Basics
Every Minecraft instance runs on a fixed-rate loop: 20 ticks per second, each one budgeted at 50 milliseconds (MSPT, milliseconds per tick). Inside that 50ms window, the game has to process entity movement, block updates, redstone, chunk generation, world saving, plugin or mod logic, and network packet handling, all on a single main thread. If everything finishes in under 50ms, you get a clean 20 TPS. If the workload spills over, the loop falls behind and TPS drops proportionally — at 100ms per tick you're running at 10 TPS, half speed, and every player on that world experiences it as lag regardless of their own connection quality.
This is the part most admins misunderstand: TPS is not a measure of network latency. A player can have a perfect ping and still see mobs freeze mid-jump because the main thread itself is overloaded. Diagnosing tick lag means looking at what happens inside that 50ms window, not at the router or the internet connection.
| TPS value | MSPT (approx.) | What players notice |
|---|---|---|
| 20 | ≤ 50ms | Normal, responsive world |
| 15-19 | 55-65ms | Minor stutter, slightly delayed mob AI |
| 10-14 | 70-100ms | Noticeable rubber-banding, slow redstone |
| < 10 | > 100ms | Block placement lag, mob freezing, chat delay |
If you want to run this diagnostic on a dedicated environment with Ryzen-class CPUs built for single-core tick performance, a Minecraft server hosting setup with NVMe storage removes two of the most common bottlenecks — slow disk I/O during chunk saves and shared CPU contention — before you even start tuning configuration files.
Reading Tick Timings Without Guessing
Before changing anything, you need numbers. Guessing at the cause of a tick drop wastes hours; a proper profiler tells you exactly which function is eating the tick budget.
Built-in tick query command
Modern vanilla and Paper-based builds expose a native command that reports average TPS and MSPT directly in the console or in-game chat:
/tick query
/tick sprint 60
/tick query returns current, 5-second, 1-minute and 5-minute averages, which is useful to separate a short spike from sustained degradation. A single dip caused by a chunk load burst looks very different from a flat 12 TPS that never recovers.
Profiling with Spark
For a granular breakdown, a sampling profiler plugin/mod gives a per-plugin, per-entity-type, per-world report of where main thread time actually goes:
/spark profiler start
/spark profiler stop --title "evening-peak"
The report highlights whether the cost comes from entity AI ticking, chunk generation, world ticking, or a specific plugin's scheduled task — which turns a vague "the world is laggy" complaint into an actionable line item.
Watching the console log
Both vanilla and Paper builds log a warning when a tick takes significantly longer than 50ms:
[Server thread/WARN]: Can't keep up! Is the server overloaded?
Running 2534ms or 50 ticks behind
Treat this message as a symptom, not a diagnosis. It confirms the loop fell behind; the profiler tells you why.
What Really Causes Tick Lag: Chunks, Entities, Distance and CPU
Once you have numbers, the usual suspects fall into four categories. Most tick drops are a combination of at least two of them.
Chunk loading and generation
Generating new terrain, especially with large structures or heavy world-gen mods, is one of the most expensive operations available. A player sprinting on an elytra or boat through unexplored terrain can single-handedly tank TPS for everyone else, because chunk generation runs on the main thread by default. Pre-generating the world ahead of time, or capping render/simulation distance for exploration-heavy game modes, removes most of this cost.
Entity count
Every mob, dropped item, projectile, and vehicle entity needs to be ticked. Mob farms, villager breeders, and unattended item accumulation are classic offenders. A single uncapped mob farm can generate hundreds of hostile entities that silently inflate tick duration long before anyone notices the pile-up.
- Set reasonable mob caps per chunk in
spigot.ymlorpaper-world-defaults.yml - Use
/killfilters or auto-despawn rules for item entities older than a few minutes - Audit farms with a profiler rather than assuming they're "fine" because they were fine at launch
View distance and simulation distance
These two settings are frequently confused but have very different costs. View distance controls how many chunks are sent to clients for rendering; simulation distance controls how many chunks are actively ticked (mob spawning, crop growth, redstone). A high simulation distance with many players spread across the map multiplies the ticked area dramatically.
# server.properties
view-distance=8
simulation-distance=6
Lowering simulation distance by even 2-3 chunks on a populated world often recovers several TPS points instantly, with far less visible impact than reducing view distance.
Single-core speed
The tick loop is fundamentally single-threaded. No amount of additional cores fixes a tick bottleneck — what matters is raw clock speed and instructions-per-cycle on the core handling that thread. This is why a high-frequency Ryzen-based instance consistently keeps tick duration lower than a multi-core but lower-clocked environment, even with identical player counts.
Stabilizing Tick Rate: A Practical Diagnostic Checklist
Treat tick stabilization as a repeatable process rather than a one-time fix, since new plugins, mods, and builds reintroduce load over time.
Step-by-step workflow
- Run
/tick queryduring peak hours to confirm whether the drop is a spike or sustained - Start a spark profile for a representative window (5-10 minutes of normal activity)
- Identify the top three time consumers in the report (plugin, entity type, or world-gen)
- Apply targeted fixes: cap entities, pre-generate chunks, adjust simulation distance
- Re-run the profiler after each change to confirm measurable improvement, not just a feeling of smoothness
Configuration checks worth automating
# paper-world-defaults.yml (excerpt)
entities:
spawning:
per-player-mob-spawns: true
chunks:
max-auto-save-chunks-per-tick: 24
prevent-moving-into-unloaded-chunks: true
Per-player mob spawning caps are particularly useful on populated worlds, since vanilla's global mob cap scales badly once player count climbs past a handful.
Operational habits that prevent regressions
- Schedule automatic backups during low-activity windows to avoid I/O contention during save ticks
- Restart on a fixed interval to clear accumulated entity/chunk cache bloat
- Keep a changelog of plugin/mod updates so a sudden TPS regression can be traced to a specific version
- Use a management panel's live console and resource graphs to spot trends before players start complaining
Managing all of this manually across file edits, restarts, and backups is tedious; a Fly-Serv game environment running through a Pterodactyl-based panel keeps console access, file editing, and scheduled backups in one place, which makes the diagnostic loop above much faster to repeat after every change. For admins who prefer to self-manage the underlying environment, a Pterodactyl-ready instance gives the same panel on infrastructure you control directly.
For deeper reference on tick internals and timing reports, the Minecraft Wiki documents the tick loop structure in detail, and the official Paper documentation covers profiler usage and configuration flags extensively.
Stable Minecraft server TPS comes down to measurement before modification: query the tick rate, profile the actual bottleneck, then adjust entities, chunk load, or simulation distance accordingly. Treat it as ongoing maintenance rather than a one-off fix, and most worlds stay close to a clean 20 TPS even under real player load.
FAQ
Why does TPS drop even with few players online?Low player count doesn't mean low tick cost. Unattended mob farms, large redstone contraptions, or background chunk generation from exploration can overload the main thread regardless of how many people are connected. Profile the world rather than assuming player count is the cause.
Does increasing RAM allocation fix tick lag?Rarely. Tick duration is driven by CPU work on the main thread, not available memory. Excess RAM allocation can actually worsen stutter by triggering longer garbage collection pauses. Fix the workload first, then adjust memory only if the profiler points to allocation pressure.
What's a healthy simulation distance for a populated world?Most communities run fine between 4 and 6 chunks of simulation distance. Push it higher only if a profiler confirms the main thread has headroom; otherwise lower it first since it directly multiplies the number of actively ticked chunks across all connected players.
Read next
- Comprendre et corriger les chutes de TPS sur un serveur MinecraftWhy TPS drops on a Minecraft server: chunk loading, entities, view distance and CPU single-core speed, plus how to read timings and fix the real bottleneck.
- Comprendre et stabiliser le TPS d'un serveur MinecraftWhat TPS really measures, why it falls below 20, and how to read a timings report to identify entities, chunks and plugins that slow your world down.
- Comprendre et corriger les chutes de TPS sur un serveur MinecraftWhy Minecraft server TPS falls below 20: chunk loading, entity count, view distance and how to read a timings report to find the real bottleneck.