Minecraft Server Lag Fix: The Complete Diagnostic Guide for 2026

Published on

Stop guessing why your server lags. We break down every type of Minecraft server lag-TPS drops, chunk loading stutter, GC pauses, and network desync-and provide the exact diagnostic steps and fixes for each.

Written by Jochem, Infrastructure Expert, 5-10 years experience in game server hosting, VPS infrastructure, and 24/7 streaming solutions. Read author bio →

Minecraft Server Lag Fix

"The server is lagging."

It's the most common complaint in every Minecraft community, and it's also the most frustrating-because "lag" is not a single problem. It's a symptom that can be caused by at least half a dozen completely different issues, each requiring a completely different fix. Throwing more RAM at the problem, upgrading your CPU, or blaming your hosting provider without diagnosis is like taking painkillers without knowing what's causing the headache.

In this comprehensive guide, we'll teach you to think like a systems engineer. We'll break down every type of Minecraft server lag, give you the exact commands and tools to diagnose the root cause, and provide the targeted fix for each scenario. Whether you're running vanilla Paper, a heavy NeoForge modpack, or a Bedrock server with add-ons, this guide has you covered.

Step 1: Identify the Type of Lag

Before you fix anything, you must classify the lag. There are four distinct categories:

1. TPS Lag (Server Tick Lag)

Symptoms: Block-break delays, mob AI freezing, redstone misfiring, items stuck in hoppers, the console printing Can't keep up! Is the server overloaded?

What's happening: The server's main thread cannot process the game logic fast enough to maintain 20 ticks per second (TPS). Each tick should complete in 50 milliseconds. When it takes longer, the game slows down.

2. Chunk Loading Stutter

Symptoms: Smooth gameplay at spawn, but the server hitches or freezes when players explore new terrain. Elytra flight causes severe lag.

What's happening: The server is generating new terrain on the fly, which requires massive CPU and storage I/O.

3. Garbage Collection (GC) Lag

Symptoms: The server runs perfectly for 2-5 minutes, then completely freezes for 1-3 seconds before resuming. This pattern repeats consistently.

What's happening: Java's garbage collector is pausing the entire server thread to clean up unused memory.

4. Network Lag (Desync)

Symptoms: Players rubber-band (teleport backward), blocks reappear after being broken, hit registration is delayed. Only some players are affected, not everyone.

What's happening: Packets between the player's client and the server are being delayed or dropped.

Step 2: Diagnose with the Right Tools

Checking TPS

The most fundamental diagnostic command:

/tps
  • 20.0 TPS - Perfect. No server-side lag.
  • 15.0–19.9 TPS - Mild lag. Players may notice slight delays.
  • 10.0–14.9 TPS - Significant lag. Gameplay is noticeably degraded.
  • Below 10.0 TPS - Critical. The server is effectively unplayable.

Checking MSPT (Milliseconds Per Tick)

TPS alone doesn't tell the full story. Use MSPT to see how close you are to the threshold:

/mspt
  • Below 40ms - Healthy. Comfortable headroom.
  • 40-50ms - Warning zone. Minor spikes will push you over.
  • Above 50ms - The server is actively dropping ticks.

Profiling with Spark

Spark is the gold-standard profiling tool for Minecraft servers. Install it as a plugin or mod, then run:

/spark profiler start

Let it run for 60 seconds during peak activity, then:

/spark profiler stop

Spark generates a detailed report showing exactly which tasks, plugins, or mods are consuming the most tick time. This is how you identify the specific culprit.

Checking GC Activity

If you suspect garbage collection pauses, add this JVM flag to your startup script:

-verbose:gc -Xlog:gc*:file=gc.log:time

Then examine the gc.log file. Look for long pause times. If you see pauses exceeding 200ms, your garbage collector is the problem.

Step 3: Apply the Targeted Fix

Fix for TPS Lag

Cause: Too many entities, tile entities, or plugin operations per tick.

Solutions:

  1. Reduce entity counts. Use /spark profiler to identify which entity types consume the most tick time. Limit mob farms, clear excess dropped items, and reduce the entity activation range in paper-world-defaults.yml:
    entity-activation-range:
      animals: 16
      monsters: 24
      misc: 8
    
  2. Reduce view and simulation distance:
    view-distance=8
    simulation-distance=6
    
  3. Audit plugins/mods. Remove or replace plugins that show high tick consumption in Spark reports.

Fix for Chunk Loading Stutter

Cause: The server is generating terrain in real-time during player exploration.

Solutions:

  1. Pre-generate your world using Chunky. See our World Pre-Generation Guide for complete instructions.
  2. Upgrade to NVMe storage. Chunk loading is fundamentally an I/O operation. NVMe drives are orders of magnitude faster than HDDs or SATA SSDs.
  3. Set a world border to prevent players from exploring beyond the pre-generated area:
    /worldborder set 10000
    

Fix for GC Lag

Cause: Java's garbage collector is freezing the server thread to clean up memory.

Solutions:

  1. Switch to Generational ZGC. If you're using the default G1GC garbage collector, switch to ZGC immediately. ZGC performs garbage collection concurrently without pausing the game thread:
    java -Xms12G -Xmx12G -XX:+UseZGC -XX:+ZGenerational \
      -XX:+AlwaysPreTouch -XX:+DisableExplicitGC \
      -jar server.jar nogui
    
  2. Set Xms equal to Xmx. This prevents the JVM from wasting time resizing the heap.
  3. Don't over-allocate RAM. A precisely tuned 12GB allocation with ZGC will outperform a sloppy 32GB allocation with G1GC every time. Read our analysis of the 32GB RAM Fallacy for details.

Fix for Network Lag

Cause: Packet loss or high latency between the player and the server.

Solutions:

  1. Check the player's ping. If only certain players lag, the issue is their network connection, not your server.
  2. Verify your hosting provider's network quality. Budget hosts on congested networks will drop packets during peak hours. Enterprise-grade providers with direct peering (like Space-Node's AMS-IX routing) maintain stable connections.
  3. Enable DDoS protection. If lag spikes correlate with specific times or events, your server may be under attack. Enterprise DDoS mitigation filters malicious traffic without interrupting legitimate game packets.
  4. Optimize compression: In server.properties:
    network-compression-threshold=256
    

When Hardware Is the Real Problem

If you've profiled with Spark, optimized your GC, pre-generated your world, and audited your plugins-and the server still can't maintain 20 TPS-then you have genuinely outgrown your hardware.

The signs are clear:

  • Spark shows that MinecraftServer.tickServer itself is the bottleneck (not any specific plugin).
  • Your CPU utilization is pinned at 100% on the main thread.
  • Adding more players or loaded chunks causes proportional TPS drops.

At this point, the only solution is infrastructure that provides higher single-thread CPU performance and faster storage I/O.

Space-Node's hosting plans are built on high-frequency AMD Ryzen 9 processors and enterprise NVMe arrays-the exact hardware profile required to maintain 20 TPS under heavy load. Before you resign yourself to lag, ensure your infrastructure is actually capable of meeting the demands of your community.

Upgrade to Lag-Free Infrastructure

Jochem

About the Author

Jochem, Infrastructure Expert, expert in game server hosting, VPS infrastructure, and 24/7 streaming solutions with 5-10 years experience.

Since 2023
500+ servers hosted
4.8/5 avg rating

I specialize in Minecraft, FiveM, Rust, and 24/7 streaming infrastructure, operating enterprise-grade AMD Ryzen 9 hardware in Netherlands datacenters.

View my full bio and credentials →

Start Your MC Server Now Today

Join content creators worldwide who trust our Minecraft infrastructure. Setup is instant and support is always available. Start from €0.90/mo (Dirt) or €2.70/mo (Coal) and go live in minutes.