Minecraft2026-05-04 · 10 min read

Why Is My Minecraft Server Lagging? 12 Fixes That Actually Work in 2026

The honest, no-fluff guide to diagnosing Minecraft server lag — with the actual config knobs, plugin recommendations and TPS thresholds we use to tune servers running on CoalHost.

First, figure out which kind of lag you have

“Lag” is three different problems with three different fixes. Identify yours before changing anything.

TPS lag (server-side)

TPS (Ticks Per Second) drops below 20. The whole world slows down — mobs walk in slow motion, redstone runs late, hits don't register. Caused by overloaded CPU, too many entities, or inefficient mods.

How to check: Run /tps in-game (Paper/Purpur) or check the panel's TPS graph.

Network lag (client-side)

Chunks load slowly, blocks pop in late, players rubber-band. TPS is 20 but the connection between client and server is slow or congested. Caused by high ping, low bandwidth, or far-away datacenter.

How to check: Press F3 in-game and check ms ping. Anything above 150 ms is uncomfortable.

MSPT spikes

Average TPS looks fine but the world freezes for half a second every few seconds. Single ticks take 100+ ms (vs the 50 ms budget). Caused by chunk generation, autosave, or a heavy plugin task.

How to check: Use the Spark profiler: /spark profiler --timeout 60

1

Check your TPS first — don't guess

Before changing anything, find out which kind of lag you actually have. Server-side and client-side lag have completely different fixes. On Paper, Purpur or Pufferfish servers, run /tps in-game. You'll see something like: `TPS: 19.97, 19.95, 19.84` — healthy `TPS: 12.4, 14.1, 16.8` — server-side lag If TPS is 20 but the game still feels laggy, it's a network problem (see fix #11), not a server problem.
2

Reduce view-distance and simulation-distance

These are the two biggest CPU drains in modern Minecraft. Open server.properties: • view-distance: 10 (default) → 6 or 7 for survival servers, 4 for minigame/lobby servers • simulation-distance: 10 (default) → 4 or 5 — mobs and redstone only run inside this radius Dropping view-distance from 10 → 6 typically cuts CPU load by 40-60% on a busy server. Players lose almost no quality of experience because client view-distance still works locally.
3

Cap entity counts in spigot.yml and bukkit.yml

Mob farms, dropped items and abandoned villager breeders eat ticks fast. In bukkit.yml: ``` spawn-limits: monsters: 30 # default 70 animals: 8 # default 10 water-animals: 3 # default 5 ambient: 1 # default 15 ``` In spigot.yml under `world-settings.default`: ``` entity-activation-range: animals: 16 monsters: 24 raiders: 48 misc: 8 ``` This stops faraway entities from running expensive AI every tick. Combined with simulation-distance, this is the single biggest TPS win for medium-sized survival servers.
4

Switch from Vanilla/Spigot to Paper or Purpur

If you're running vanilla or Spigot, you're leaving 30-50% performance on the table. Paper is a Spigot fork with massive optimization patches, async chunk loading, and better mob AI. Purpur is a Paper fork with even more configuration knobs — useful if you want to disable specific vanilla mechanics that cause lag (like phantom spawning or entity collision). Download from papermc.io. All Bukkit/Spigot plugins work on Paper without changes. On CoalHost, switch in one click from the panel — your world saves are preserved.
5

Tune paper.yml for chunk loading

Paper's chunk-loading settings control how aggressively the server loads new chunks. In paper-world-defaults.yml: ``` chunks: max-auto-save-chunks-per-tick: 8 # default 24 prevent-moving-into-unloaded-chunks: true entities: spawning: per-player-mob-spawns: true ``` per-player-mob-spawns: true makes mob caps apply per-player rather than per-server. Result: a 30-player server feels populated for everyone, but the total entity count stays low. max-auto-save-chunks-per-tick: 8 spreads the autosave cost over more ticks, eliminating the 1-2 second freeze every 5 minutes.
6

Pre-generate the world with Chunky

Most chunk-loading lag happens when players explore new areas. The fix: pre-generate chunks before players arrive. Install the Chunky plugin (free, on Modrinth). Then run: `/chunky radius 5000` `/chunky start` This generates a 5000-block-radius circle around spawn (≈10,000 chunks). Takes 30 minutes to a few hours depending on your CPU. After it's done, chunk-loading lag essentially disappears for the explored area. Do this once after world creation, then once more after expanding the world border.
7

Profile with Spark to find the actual culprit

Stop guessing. The Spark plugin (spark.lucko.me) tells you exactly which plugin or vanilla system is eating ticks. Install Spark, then in-game: `/spark profiler --timeout 60` Wait 60 seconds, then click the link Spark posts in chat. You'll see a flame graph showing CPU time per plugin and per method. Common surprises we've seen on customer servers: • A single villager-breeder farm using 18% of tick time • EssentialsX afk-checker ticking every player every tick • A hopper minecart line under spawn doing 12,000 inventory checks/sec
8

Allocate the right amount of RAM (more is not always better)

Common myth: more RAM = less lag. False. Once you have enough RAM, adding more makes garbage collection pauses *longer*. Practical RAM guide: • Vanilla/Paper, 1-10 players: 4 GB • Vanilla/Paper, 10-30 players: 6 GB • Light modpacks (50-100 mods): 6-8 GB • Heavy modpacks (ATM10, Enigmatica): 10-12 GB • 200+ mod packs (RLCraft 2 etc.): 12-16 GB Going above what you need wastes money and hurts GC performance. If you're already on 16 GB and still lagging, the problem isn't RAM — it's CPU or a misbehaving plugin. Use Aikar's flags for the JVM (CoalHost applies them by default).
9

Disable expensive vanilla features you don't need

Some vanilla features cost a lot of ticks for little gameplay value. In paper-world-defaults.yml: ``` entities: behavior: disable-player-crits: false phantoms-do-not-spawn-on-creative-players: true villager-needs-bed-and-profession-for-conversion: true fixes: fix-curing-zombie-villager-discount-exploit: true hopper: cooldown-when-full: true disable-move-event: true ``` disable-move-event: true is huge if you have any plugins that listen for hopper movement events (most economy/log plugins do). Cuts hopper-related TPS load by ~70%.
10

Audit your plugin list — every plugin costs ticks

Every plugin you install adds tick time, even when it does nothing visible. Common offenders: • Dynmap — fine for small servers, very heavy on big ones. Use BlueMap instead (renders client-side) • CoreProtect — invaluable but configure pruning (`/co purge t:30d`) or the database becomes slow • Towny / Factions / Lands — heavy land-claim plugins; only run one • Old EssentialsX with too many enabled commands — disable what you don't use Rule of thumb: if you have more than 30 plugins on a vanilla-style server, audit them. Most servers can run on 8-12 well-chosen plugins.
11

Pick a server location close to your players

Network lag (ping) is purely about physical distance and routing. No amount of TPS tuning fixes a 250 ms ping. Rule of thumb for European players: • Helsinki / Frankfurt / Amsterdam — under 50 ms across most of Europe • US East — 100-130 ms from EU, painful for PvP • US West / Asia — 180+ ms from EU, basically unplayable for fast combat CoalHost's datacenter is in Helsinki — well-routed across the Nordics, Baltic states, Central Europe and the UK. If most of your players are in North America, pick a US-based host instead — physics doesn't care about how good the server is.
12

When all else fails: upgrade the CPU, not the RAM

If you've done everything above and still see TPS drops, you're CPU-bound. Minecraft's main thread is single-threaded, so what matters is single-core clock speed and IPC, not core count. Look for hosts using: • Ryzen 7000/9000-series (Zen 4/5) • Intel 13th/14th/15th-gen i7/i9 • Avoid older Xeon-based VPS hosts — they have lots of cores but slow single-thread perf CoalHost uses Ryzen 9 7950X3D — the X3D cache is particularly good for Minecraft because chunk data stays hot in L3 cache. If you're already on fast hardware and still lagging, the problem is your world or plugins, not the host.

FAQ

What is good TPS for a Minecraft server?+

20.0 TPS is perfect (server is keeping up with the game's tick rate). Anything between 19.5 and 20.0 is fine and unnoticeable. Below 18 starts to feel laggy. Below 15, mobs visibly slow down and combat feels broken.

How much RAM do I need for a Minecraft server?+

For vanilla or Paper: 4 GB for 1-10 players, 6 GB for 10-30 players. For modpacks: 6-8 GB for light packs (under 100 mods), 10-12 GB for kitchen-sink packs like ATM10 or Enigmatica 9. Going above what you need does not improve performance and can hurt garbage collection.

Why does my server lag when players explore new areas?+

That's chunk-generation lag. Fix it by pre-generating chunks with the Chunky plugin (run /chunky radius 5000 once after world creation). After pre-generation, exploration lag essentially disappears.

Is Paper better than Spigot for performance?+

Yes, significantly. Paper includes async chunk loading, optimized mob AI, fixed memory leaks, and dozens of other patches. It's a drop-in replacement for Spigot and runs all Spigot/Bukkit plugins. There is essentially no reason to run vanilla Spigot in 2026.

How do I find which plugin is causing lag?+

Install the Spark plugin (free, from spark.lucko.me). Run /spark profiler --timeout 60 in-game, wait one minute, then open the link Spark posts in chat. You'll see a flame graph showing exactly which plugin and which method is using tick time.

Lag-free Minecraft hosting from €8/month

Ryzen 9 7950X3D, NVMe storage, Helsinki datacenter. Paper, Purpur, Forge, Fabric or any modpack — pre-installed in 2 minutes.

View Minecraft Hosting →