Minecraft Updated April 21, 2026

Troubleshoot and Fix Minecraft Server Performance

Diagnose and fix Minecraft server lag — tune view-distance, pre-generate chunks with Chunky, profile with Spark, switch from Vanilla to Paper, apply Aikar's JVM flags, and cut entity counts. Works on wisp.gg-hosted servers.

MinecraftperformancelagTPSPaperSparkChunkyJVMwisp

Before You Start

Minecraft server lag feels like lag to players, but there are two very different kinds:

  • TPS lag (server-side) — the whole server slows down, hit detection is delayed, mobs freeze, commands stall. This is what you fix from the server side.
  • Ping lag (client-side) — only some players are affected, others are fine. Usually a network or ISP issue on their end, not yours.

If some players lag but others don't, it's not a server performance issue. Skip this article and check the High Latency / Lag Troubleshooting guide instead.

If everyone is experiencing rubber-banding, delayed hits, or stuck mobs — keep reading.

Step 1: Check Your TPS

TPS (Ticks Per Second) is the heartbeat of your Minecraft server. The game is designed to run at 20 TPS. Below that, everything slows down.

How to check TPS:

  • Paper / Purpur / Spigot: In the server console or in-game (as op), run /tps
  • Fabric with a perf mod: /tps (if installed) or check Spark — see Step 5
  • Vanilla: Vanilla doesn't have a built-in /tps command. Either switch to Paper (Step 3) or install Spark to measure it.

A healthy server shows 20.0, 20.0, 20.0 (1m, 5m, 15m averages). Anything under 19.0 is lag.

Step 2: Fix the Easy Wins in server.properties

Open File Manager in the wisp.gg panel and edit server.properties. These three settings have the biggest impact on performance:

Setting Default Recommended Why
view-distance 10 8 Chunks sent to each player. Every +1 is a huge memory + CPU cost. 8 is plenty for survival.
simulation-distance 10 6–8 Chunks where mobs tick, crops grow, redstone runs. Lower this aggressively if you're lagging.
network-compression-threshold 256 512 on modern networks, -1 on LAN Higher = less CPU spent compressing small packets.

Restart the server after editing. Check /tps again — for most modded/heavy-populated servers, this alone recovers 3–5 TPS.

You can also use our server.properties generator to build a clean config with tooltips for every setting.

Step 3: Switch from Vanilla to Paper (or Purpur)

This is the single biggest thing you can do. Vanilla Minecraft's server code is not designed for performance at scale. Paper (and its fork Purpur) are drop-in replacements that:

  • Run the same plugins as Vanilla (it IS Vanilla, with optimizations)
  • Are fully compatible with all vanilla worlds and save files
  • Can easily double or triple your TPS on the same hardware
  • Expose hundreds of tuning knobs in paper-global.yml and per-world paper-world.yml

To switch on wisp.gg:

  1. Stop your server
  2. In the Startup tab, find the "Server Jar File" or "Paper Version" variable
  3. Select Paper (or Purpur if you want extra features) matching your current Minecraft version
  4. Start the server — it will auto-download the Paper jar

Paper is a true superset of Vanilla — you lose nothing and gain everything. There's no reason to run Vanilla in production.

Modded servers: Paper doesn't work with Forge/NeoForge/Fabric mods. For modded servers, stay on your mod loader but apply the other steps in this guide.

Step 4: Pre-Generate Your World with Chunky

Every time a player walks into un-generated terrain, the server has to generate that chunk — heavy CPU work that blocks the main thread and drops TPS. Pre-generating the whole playable area once fixes this permanently.

Install Chunky:

  • Paper/Purpur: Download the .jar from CurseForge or Modrinth and drop it in /plugins/. Restart.
  • Fabric: Install the Fabric version of Chunky as a mod.

Pre-generate a border of 5,000 blocks (25km²) around spawn:

/chunky radius 5000
/chunky start

Chunky will generate chunks in the background at a controlled rate. Expect this to take 15 minutes to several hours depending on your plan's CPU and the radius. You can leave it running — it auto-pauses when TPS dips.

Check progress:

/chunky status

Set a world border at the pre-generated edge so players can't walk into un-generated territory:

/worldborder set 10000
/worldborder center 0 0

One-time cost, permanent fix. Do this before advertising your server.

Step 5: Profile with Spark

Once the easy fixes are applied, if you're still lagging you need to know what is causing it. Spark is the tool.

Install Spark:

  • Paper/Purpur: Download the plugin .jar from Spark's downloads page and drop it in /plugins/. Restart.
  • Fabric/Forge: Install the matching mod version from the same page.

Run a profiler for 2 minutes while you reproduce the lag:

/spark profiler --timeout 120

When it finishes, Spark uploads the report and gives you a link. Open it in a browser and you'll see:

  • Which methods are eating CPU (usually mods, plugins, or specific blocks)
  • Which thread is the bottleneck (almost always the main server thread)
  • Hotspots ranked by percentage of tick time

Look for red flags:

  • A single plugin using >20% of tick time → disable it, contact the plugin author, or find an alternative
  • A mob/entity class using >10% → too many of that entity (see Step 6)
  • Chunk I/O dominating → pre-generate (Step 4) or get faster storage

Useful Spark commands:

Command What it does
/spark profiler --timeout 120 Run a 2-minute profiler
/spark tps Detailed TPS breakdown per-tick
/spark tickmonitor Live monitor of slow ticks as they happen
/spark healthreport Summary of CPU, memory, and GC health
/spark heapsummary Memory usage by object type (find memory leaks)

Step 6: Clear Excess Entities

Dropped items, passive mobs, and player-built farms pile up over time. A single oversized mob farm can tank your TPS for the whole server.

Find how many of each entity exist:

/minecraft:data get entity @e[type=item,limit=1]

or with Essentials/EssentialsX:

/lagg chunk

Nuclear option — clear all dropped items (safe, but pickups vanish):

/kill @e[type=item]

Clear all non-player entities (wipes pets, villagers, animals — use with care):

/kill @e[type=!player]

Clear only items in a specific range:

/kill @e[type=item,distance=..50]

For recurring cleanup, install a plugin like ClearLag or configure Paper's built-in entity activation range in paper-world.yml to only tick entities near players.

Step 7: Tune JVM Flags (Aikar's Flags)

Minecraft runs on the JVM, and default JVM settings are not tuned for a game server. Applying Aikar's flags is a well-known set of G1GC tweaks that dramatically reduce GC pauses.

In wisp.gg:

  1. Stop the server
  2. Go to the Startup tab
  3. Find the Java Flags or JVM Arguments variable
  4. Paste Aikar's flags:
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true
  1. Start the server

These flags tell the JVM to keep GC pauses under 200ms and pre-touch allocated memory — both of which smooth out TPS dips during garbage collection.

Don't apply Aikar's flags to servers with less than 4 GB of RAM — some of the tuning assumes ≥ 4 GB. For 1–2 GB servers, stick with the defaults.

Step 8: Mod & Plugin Triage

If you're running a heavy modpack, the issue is usually one bad mod — not 200 of them.

Binary-search to find the culprit:

  1. Back up your server files (always)
  2. Disable half your mods (rename /mods → /mods-disabled, create new /mods with half the jars)
  3. Start, test, run /tps
  4. If TPS improved, the offender is in the disabled half; otherwise the active half
  5. Bisect from there until you find the mod

Common troublemakers:

  • Mods adding aggressive random-tick mechanics (weather, insects, plant growth)
  • Mods adding hundreds of entities per chunk (extra mob mods)
  • Mods with known performance issues — check the mod's CurseForge comments
  • Mismatched mod versions between server and players → disconnects, chunk desync, perceived lag

Step 9: Enough Hardware?

If you've done everything above and you're still below 20 TPS, you're out of hardware. Check the wisp.gg Dashboard for your CPU and RAM meters:

  • CPU pinned at 100% — you need faster cores or fewer players/mods. Minecraft is single-threaded per world, so it's all about single-core speed.
  • Memory consistently above 80% — you need more RAM. Modded servers often need 8–16 GB.

Rough RAM guidelines:

Server Type Players Recommended RAM
Vanilla/Paper 1–10 2–4 GB
Paper with plugins 10–30 4–8 GB
Light modpack (50–100 mods) 5–15 6–10 GB
Heavy modpack (200+ mods) 5–15 10–16 GB
Sky-factory / tech-heavy modpacks 5–15 12–20 GB

Upgrade your plan in the billing portal or ask on Discord — we can help size it right before you commit.

Quick Checklist

  • /tps says 20.0 (if not, keep reading)
  • view-distance set to 8, simulation-distance set to 6–8
  • Running Paper or Purpur (not Vanilla)
  • World pre-generated with Chunky + world border set
  • Spark installed and profiler run to find hotspots
  • Entity counts sanity-checked, excess items cleared
  • Aikar's flags applied (if ≥ 4 GB RAM)
  • Mod triage done if you're running a modpack
  • CPU and RAM graphs on dashboard are healthy

Still lagging after all this? Hop into Discord with a Spark profile link and we'll take a look.