Skip to content

Minecraft · Advanced

How to improve Minecraft server TPS and performance

When the server "lags" — blocks snap back, mobs freeze, redstone slows down — TPS is usually dropping. This guide shows how to find the real cause and which changes make the biggest difference. It is not a universal recipe: every change also alters gameplay, so adjust step by step and measure after each change.

What TPS and MSPT are

A Minecraft server simulates the world in "ticks", ideally 20 times a second. TPS (ticks per second) shows how many ticks the server actually manages — 20 is the maximum. MSPT (milliseconds per tick) is how long one tick takes. As long as MSPT stays under 50 ms, TPS holds at 20; above 50 ms TPS starts to drop. MSPT is therefore the more useful metric — it reveals a problem before players notice.

console
tps     # Paper/Spigot: TPS over the last 1, 5 and 15 minutes
mspt    # Paper: average tick time
ℹ️ Info:The main world simulation runs on a single thread. More cores alone therefore do not raise TPS — what matters is how much work the server has to do in each tick.

1Measure what slows the server (spark)

spark is a profiler that shows how much time individual plugins, mods, entities and chunks take. Recent Paper builds bundle it; otherwise download it from Modrinth (available for Paper, Fabric, Forge and NeoForge) and install it as a plugin or mod.

console
spark tps                      # TPS and MSPT including peaks
spark health                   # CPU, memory and disk usage
spark profiler start           # start profiling
# ...let it run for a few minutes while the lag happens...
spark profiler stop            # stop and print a link to the report

In the report expand the "Server thread" and look for the entries with the largest share of time — typically a specific plugin, entity ticking, chunk generation or redstone/hoppers. Use that to decide which of the following steps to tackle first.


2View distance and simulation distance

In server.properties two options have the biggest effect on load:

KeyWhat it affectsDefault
view-distanceHow many chunks around a player are sent to the client (what they see).10
simulation-distanceThe radius around a player where the world "runs" — crops grow, mobs move, redstone works.10

The number of processed chunks grows with the square of the distance, so even a small reduction is noticeable. A reasonable starting point for a public server is simulation-distance 4–6 and view-distance 6–8; a smaller server can afford more. Changes apply after a restart.

properties
view-distance=8
simulation-distance=5
💡 Tip:On Paper you can also set distances per world in spigot.yml (the world-settings section), e.g. lower for the Nether and the End.

3Pre-generate the world with Chunky

Generating new chunks is one of the most expensive operations. When players explore new terrain (especially with elytra), the server generates on the fly and TPS drops. The fix is to generate the world in advance within a limited area and keep players inside it.

Install Chunky (available for Paper, Fabric, Forge and NeoForge) and run in the console:

console
chunky world world        # the world to generate
chunky center 0 0         # centre of the area
chunky radius 5000        # radius in blocks
chunky start              # start generating
chunky pause              # pause (resume: chunky continue)

worldborder center 0 0
worldborder set 10000     # border diameter = 2 × radius
  • Run the generation when nobody is playing — it fully loads the server while it runs.
  • A pre-generated world takes disk space. Check free space in the panel before starting and begin with a smaller radius.
  • Repeat for the Nether (world_nether) and the End (world_the_end) if players use them.

4Entities and farms

Large numbers of entities — penned animals, dropped items, minecarts, armour stands, mob farms — are among the most common causes of low TPS. On Paper you can find where they pile up with:

console
paper entity list                    # entity counts by type
paper entity list minecraft:cow      # where exactly the cows are (by chunk)
  • Agree farm rules with players (maximum animals per pen, farms that can be switched off).
  • Mob spawn limits are set in bukkit.yml under spawn-limits; lower values mean fewer mobs around players.
  • In spigot.yml the entity-activation-range options control the distance from which entities are ticked in a simplified way, and merge-radius merges dropped items and experience orbs.

5Paper configuration

Paper has its own configuration in the config/ folder: paper-global.yml (whole server) and paper-world-defaults.yml (defaults for worlds). Commonly adjusted options in paper-world-defaults.yml:

OptionWhat it does
entities.spawning.despawn-rangesDistance at which mobs despawn. Smaller values = fewer mobs in the world.
entities.spawning.per-player-mob-spawnsSpreads the mob cap more evenly between players.
collisions.max-entity-collisionsLimits how many collisions an entity computes — helps with crowded animals.
misc.redstone-implementationAn alternative redstone implementation (e.g. ALTERNATE_CURRENT) is faster but may change how some circuits behave.
hopper.disable-move-eventSpeeds up hoppers; do not enable if a plugin (e.g. land protection) needs the event.
chunks.max-auto-save-chunks-per-tickSpreads world saving over more ticks and reduces short stutters.

Exact meanings and default values are in the Paper documentation. Option names may differ between versions — always follow the file your server generated.

⚠️ Warning:Back up the files before editing (downloading them via Files or SFTP is enough). Wrong indentation in a YAML file can prevent the server from starting.

6Plugins and mods

  • Remove plugins and mods you do not use. Each adds work at startup and at runtime.
  • If spark shows one plugin taking a large share of time, try updating it, tuning its config or replacing it.
  • On Fabric, server-side optimisation mods such as Lithium help; Forge/NeoForge have similar ones (e.g. ModernFix). Check compatibility with your modpack.
  • Plugins that periodically "clear lag" by mass-removing entities only treat the symptom and make players' items disappear. Finding the source is better.

Will more RAM help?

Only when the server is genuinely running out of memory. You can tell with spark health or in the panel graphs: memory stays at the limit, the spark report shows frequent long garbage collection pauses, or the server crashes with OutOfMemoryError. If the problem is entities, chunk generation or a plugin, more RAM will not raise TPS. You can upgrade the plan in the client area; it applies after a restart.

If you are still choosing a plan, see Minecraft hosting — the plan advisor always states the assumptions behind its estimate.


Quick reference

SymptomLikely causeWhere to start
Lag when exploring new terrainChunk generationChunky + world border
Lag always in the same placeA farm, piles of entities, redstonepaper entity list
Lag grows with player countSimulation distance too largeserver.properties
Regular short stuttersWorld saving, garbage collectorspark profiler
Lag after installing a plugin/modA specific plugin or modspark profiler

Related: installing plugins, backups and version changes.

TPS still low?

Send support a link to the spark report and a description of when the lag happens. The report shows the cause far better than a description.


Looking for Minecraft server hosting?

Paper, Fabric, Forge and modpacks in the Pterodactyl panel on our own hardware in Frankfurt am Main. If you get stuck, contact support.