Fix Minecraft server lag
“The server is lagging” can have three completely different causes: the server can't keep up, the connection is bad, or the player's PC is struggling. This guide shows you how to find out which it is and what actually helps – by measuring instead of guessing.
9 min read · Last reviewed: October 2026
TPS, MSPT, ping, FPS – what's what?
| Value | Meaning | Good | Symptom when it's bad |
|---|---|---|---|
| TPS | Server ticks per second | 20 (the maximum) | Everything slows down: mobs stutter, blocks reappear, daytime crawls |
| MSPT | Milliseconds of work per tick | below 50 ms | Above 50 ms TPS drops below 20 |
| Ping | Round trip player ↔ server | below ~80 ms | Only some players affected, rubber-banding while walking |
| FPS | Frames per second on the player's PC | stable | Stutter for that player only, server TPS normal |
Rule of thumb: if everyone suffers at once, it's the server (TPS). If only one player does, it's their connection or their PC. No server tuning fixes ping or FPS.
Step 1: Measure, don't guess
Paper has two quick console commands (in the AvantaHost panel: the Console tab):
tps # TPS over the last 1, 5 and 15 minutes mspt # time spent per tick
If TPS sits at 20 and MSPT is well below 50, the server has headroom – look at ping or FPS instead. The Overview tab is worth a look too: if CPU constantly sits at your package's limit, that's a clear sign.
Step 2: Find the cause with spark
spark shows which part of the server eats the time: a plugin, a mob farm, redstone or chunk loading. Since Minecraft 1.21 spark ships with Paper. On older versions and other software (Fabric, Forge) install it as a plugin or mod from spark.lucko.me.
# Start the profiler, stops automatically after 10 minutes spark profiler start --timeout 600 # or start and stop manually spark profiler start spark profiler stop # Only record ticks longer than 60 ms (great for short lag spikes) spark profiler start --only-ticks-over 60 # Overall health: TPS, MSPT, CPU, memory, disk spark health
spark ends with a link to the report. Expand the tree under the server thread and follow the largest percentages. Typical findings:
- A plugin name at the top → update it, check its settings or replace it.
entityTick/ lots of entities → mob farms, dropped items, too many animals in one spot.- Chunk generation → players exploring new areas. Fix: pregeneration (step 5).
- Hoppers and redstone → large sorting systems and clock circuits.
/timings) is deprecated and disabled by default in Paper since 1.21 – use spark.Step 3: view-distance and simulation-distance
This is the most effective single lever. Both values live in server.properties (Files tab) and are measured in chunks:
- view-distance: how far players can see the world. Mostly costs bandwidth and memory.
- simulation-distance: the radius in which mobs, crops and redstone are actually processed. Costs CPU – and it grows with the square of the radius.
# Both default to 10 view-distance=8 simulation-distance=6
A radius of 6 instead of 10 means roughly 169 instead of 441 simulated chunks per player – less than half. Players barely notice, and farms keep working as long as someone is nearby. Don't forget to restart.
Step 4: Tune Paper settings
If your server still runs Vanilla, switching to Paper is the biggest improvement of all – fully compatible with normal worlds. Paper also adds config/paper-world-defaults.yml. A few options that barely change gameplay:
collisions: max-entity-collisions: 2 # default 8 environment: optimize-explosions: true # default false chunks: max-auto-save-chunks-per-tick: 8 # default 24, smooths auto-save spikes
Use these with care – they change behaviour:
| Option | Effect | Side effect |
|---|---|---|
misc.redstone-implementation: ALTERNATE_CURRENT | Much faster redstone | Redstone dust behaves differently, some technical builds break |
hopper.disable-move-event: true | Faster hoppers | Protection plugins (claims, shops) no longer see hopper movement |
tick-rates.mob-spawner | Spawners ticked less often | Spawner farms yield less |
entities.spawning.despawn-ranges | Mobs despawn sooner | Worth adjusting along with a low simulation-distance |
Change only a few values at a time and measure again with spark. Every option is explained in the Paper documentation.
Step 5: Pregenerate the world with Chunky
Generating new chunks is one of the most expensive things a server does. When players fly through unexplored land with elytra, TPS collapses. The fix: pregenerate the world while nobody is playing and set a world border.
Install the Chunky plugin (from Hangar or Modrinth) as described in Install Minecraft plugins. Then in the console:
# World border: 10,000 blocks across, centred on 0,0 worldborder center 0 0 worldborder set 10000 # Chunky takes centre and radius from the world border chunky world world chunky worldborder chunky start # Progress, pause, resume chunky progress chunky pause chunky continue
Repeat for the Nether and the End with chunky world world_nether or world_the_end (a smaller radius is enough there).
Step 6: Typical in-game lag sources
- Too many animals in pens (hundreds of cows in one spot). Limit breeding.
- Dropped items, e.g. from broken farms. Remove them from the console with
kill @e[type=item]– careful, this deletes every currently loaded item drop. - Redstone clocks that run constantly, even when nobody uses the build.
- Plugins that scan the world (some anti-xray or logging plugins with the wrong settings).
- Outdated plugins after a Minecraft update – spark reliably points them out.
Myth: more RAM makes the server faster
The most common misconception. Minecraft processes the world mainly on one thread – TPS depends on single-core CPU performance, not on memory. You need enough RAM, but no more:
- Paper recommends 6–10 GB for most servers, even with few players. Small vanilla groups get by with less.
- Beyond a certain point, more RAM gives “minimal returns” according to the Paper docs – 32 GB for a normal server is wasted money.
- Too much RAM can even hurt: the garbage collector has more to clean up and pauses get longer.
- You can spot too little RAM when
spark healthshows a nearly full heap and frequent GC pauses – or a crash withOutOfMemoryError.
Bottom line: almost always measure and tune first. A bigger package mainly helps when spark shows a CPU that's constantly maxed out even though view distance, entities and plugins are reasonable.
Minecraft hosting with headroom
Our Minecraft packages run on high-clocked CPU cores with NVMe storage, and you can pick Paper right when ordering. If spark shows the CPU really is at its limit, you'll find the larger packages there too.
View Minecraft packages