There is nothing that kills the momentum of a great session faster than lag. You’re deep in a cave, about to land a critical hit on a Creeper, when suddenly—the world freezes. Blocks don’t break, mobs stop moving, and the “rubber-banding” begins. For players, it’s frustrating. For owners of Minecraft servers, it’s an existential threat to player retention.
In the past, diagnosing these issues was a dark art. You had to guess which plugin was acting up or blindly upgrade your Minecraft server hosting plan, hoping more RAM would solve the problem (spoiler: it usually doesn’t).
Enter Spark. In 2026, Spark has become the gold standard for performance profiling. This guide will take you from a confused beginner to a lag-hunting expert, showing you exactly how to read a Spark report and reclaim your 20 TPS.
What is Spark (and Why Do You Need It)?
Spark is a performance profiling plugin and mod for Minecraft. Unlike basic commands like /tps, Spark doesn’t just tell you that your server is lagging; it tells you why. It acts like a high-speed camera for your server’s CPU, taking “snapshots” of what the code is doing thousands of times per second.
Spark vs. Aikar’s Timings
While many veterans are used to Aikar’s Timings (built into Paper/Spigot), Spark is more detailed and works across more platforms, including Fabric and Forge. As we discussed in [Java vs Bedrock Servers: Key Differences Explained], the underlying architecture of your server determines your optimization path, and Spark is the most versatile tool for the job.
Step 1: Generating Your First Report
To start a Minecraft server diagnosis, you first need data. If you have Spark installed, follow these steps to generate a profiler link.
- Start the Profiler: Run
/spark profiler startin-game or via console. - Wait: Let it run for at least 3–5 minutes. To find a “hot spot,” you need the server to be active with players.
- Stop and Upload: Run
/spark profiler stop. - Open the Link: Spark will provide a URL (e.g.,
spark.lucko.me/ABC123XYZ). This is your Spark Report.
Expert Tip: If you are experiencing sudden lag spikes rather than constant sluggishness, use the command
/spark profiler start --only-ticks-over 100. This tells Spark to only record data when a tick takes longer than 100ms, filtering out the “noise” of healthy performance.
Step 2: Understanding the Vital Signs (TPS and MSPT)
When you open the report, the first thing you see is the “Summary” dashboard. Before diving into the complex “call tree,” look at these two metrics.
TPS (Ticks Per Second)
- What it is: The “heartbeat” of the server. Minecraft is designed to run at 20 ticks per second.
- The Goal: 20.0.
- The Warning Sign: If this is below 18.0, your players will start to notice “server lag.”
MSPT (Milliseconds Per Tick)
- What it is: The actual time it takes for the server to calculate a single tick.
- The Math: Since there are 1,000ms in a second, and the server wants 20 ticks, you have a “budget” of 50ms per tick.
- The Goal: Anything under 40ms is healthy.
- The Warning Sign: If your MSPT is 50.1ms, your TPS will drop below 20.
| MSPT Value | Server Health Status |
| 0 – 30ms | Excellent: Plenty of “headroom” for more players. |
| 30 – 45ms | Good: Stable, but getting close to the limit. |
| 45 – 50ms | Strained: Any sudden event (like world gen) will cause lag. |
| 50ms+ | Lagging: The server is officially “skipping” ticks. |
Step 3: Navigating the Call Tree (Finding the Culprit)
This is where beginners usually get intimidated. The “Call Tree” is a list of every function the server ran during the profile.
How to Read the Hierarchy
The list starts with the “Server Thread.” As you click the plus (+) icons, you are digging deeper into the code. The percentages on the right tell you how much of the CPU’s total time was spent on that specific task.
The Golden Rule of Debugging: Follow the biggest percentage. If Server Level Tick is taking up 90% of the thread, click into it. If inside that, Entities is taking up 80%, you’ve found your problem: it’s an entity issue.
Common “Red Flags” in the Call Tree
entity.EntityAnimal.aiStep: This means you have too many animals (likely a massive cow or chicken farm) calculations taking up CPU time.block.entity.Hopper: Hoppers are notorious for lag because they “search” for items above them every tick.world.chunk.ChunkProvider: This points to “World Generation” lag. If players are exploring new terrain too fast, the CPU can’t keep up. This is a common issue even on the best Minecraft servers.plugin.[Name]: If you see a specific plugin name at the top of the list, that plugin is poorly optimized or misconfigured.
Step 4: The “World” Tab – Tracking Entities and Chunks
One of Spark’s best features is the World Tab. Instead of reading code, you can see a literal list of what is currently loaded in your world.
- Entity Count: Look for any entity with a count over 500–1,000. If you see 2,000 “Item” entities, someone likely blew up a chest or has a farm overflowing onto the floor.
- Chunk Count: High chunk counts usually mean your
view-distanceis too high inserver.properties.
As we mentioned in [Minecraft Server Hosting: Performance, RAM, and TPS Explained], high entity counts aren’t just a RAM issue; they are a CPU bottleneck. Every single zombie needs to “think” (AI) and “check for collisions” every 50ms.
Common Lag Sources and How to Fix Them
Once you’ve identified the source in your Spark report, use this table to find the solution.
| Identified Cause | Recommended Action |
| Entity AI Lag | Install an optimization mod like EntityCulling or reduce mob caps. |
| Hopper Lag | Place composters on top of hoppers to stop them from searching for item entities. |
| World Generation | Pre-generate your world using the Chunky plugin. |
| Plugin Overhead | Check for updates or replace the plugin with a more efficient alternative. |
| GC (Garbage Collection) | This is a RAM/Java issue. See [A Deep Dive into Aikar’s Flags: The Science of JVM Optimization]. |
Common Mistakes Beginners Make
- Profiling an Empty Server: If you run Spark when no one is online, the report will look “perfect,” but it won’t help you find why the server lags during peak hours.
- Focusing on 1% Tasks: Don’t waste time trying to optimize a task that only takes up 1.2% of your CPU. Go for the “Big Fish” (anything over 15–20%).
- Assuming it’s Always RAM: Beginners often think lag means they need more RAM. If your Spark report shows high MSPT but your RAM usage is only 50%, more RAM will not help. You likely need a faster CPU with better single-core performance.
FAQ: People Also Ask
Q: My TPS is 20, but my players are still lagging. Why?
A: This is likely “Network Lag” or “Client-side Lag.” Check your ping in the Spark report. If TPS is 20 but ping is 300ms, the issue is the player’s connection or the server’s location.
Q: Can I run Spark on a Bedrock server?
A: Spark is primarily for Java Edition (including Geyser setups). For native Bedrock, you are limited to the built-in performance toggles, as discussed in [Mastering the Bedrock Dedicated Server: Advanced Configuration Tips].
Q: How long should a Spark profile last?
A: For general debugging, 5 minutes is perfect. For specific lag spikes, let it run until the spike occurs, then stop it immediately.
Conclusion
A low lag Minecraft server isn’t a matter of luck; it’s a matter of data. By learning to read Spark reports, you move from “guessing” to “knowing.” You can pinpoint exactly which player’s illegal gold farm is crashing the server or which outdated plugin is hogging the CPU.
If your Spark reports consistently show high “System CPU” usage even when your server isn’t doing much, it might be time to move away from oversold “budget” hosts. Check out our list of [The best Minecraft Hosting Providers] to find a host that gives you the dedicated power your community deserves.




