---
title: "How to Read a Spark Profiler Report for Minecraft | ZCS"
description: "Learn how to collect and interpret spark profiling reports, distinguish server thread time from idle sleep, and validate a Minecraft performance fix."
url: "https://www.zcraftstudios.com/blog/how-to-read-spark-profiler-minecraft"
updated: "2026-10-20T07:16:50.972429+00:00"
source: "ZCraft Studios"
---

> Site index for AI agents: https://www.zcraftstudios.com/llms.txt (full reference: https://www.zcraftstudios.com/llms-full.txt). Every page is available as Markdown by adding `.md` to its URL or sending `Accept: text/markdown`.

1. [Home](https://www.zcraftstudios.com/)
2. [Blog](https://www.zcraftstudios.com/blog)
3. How to Read a Spark Profiler Report for Minecraft

[ All posts](https://www.zcraftstudios.com/blog)

# How to Read a Spark Profiler Report for Minecraft

ZCraft StudiosOct 15, 2026Updated Oct 20, 2026

Learn how to collect and interpret spark profiling reports, distinguish server thread time from idle sleep, and validate a Minecraft performance fix.

## In this guide

- [1\. Check what kind of lag you are seeing](#1-check-what-kind-of-lag-you-are-seeing)
- [2\. Collect a report during the problem](#2-collect-a-report-during-the-problem)
- [3\. Understand the call tree](#3-understand-the-call-tree)
- [4\. Interpret expensive paths carefully](#4-interpret-expensive-paths-carefully)
- [5\. Find the owner of the workload](#5-find-the-owner-of-the-workload)
- [6\. Run a controlled fix experiment](#6-run-a-controlled-fix-experiment)
- [7\. Common profiling mistakes](#7-common-profiling-mistakes)
- [When to investigate memory instead](#when-to-investigate-memory-instead)
- [A repeatable report template](#a-repeatable-report-template)
- [Further reading](#further-reading)

## How to Read a Minecraft Spark Profiler Report

When players say a Minecraft server is lagging, the useful next step is to collect evidence during the slow activity. Spark records where CPU time is spent so you can investigate the likely cause rather than changing random settings.

**Quick answer:** Run a profile while the slowdown is happening, inspect the server thread, expand the expensive call paths and compare a second report after one controlled change.

## 1\. Check what kind of lag you are seeing

TPS and MSPT indicate server simulation timing, ping describes the network path, and FPS describes client rendering. A profiler of the dedicated server is appropriate when tick work is slow. It is not a direct fix for one player having poor Wi-Fi or low FPS.

See [TPS vs Ping vs FPS](https://www.zcraftstudios.com/blog/minecraft-server-tps-vs-ping-vs-fps) for a simple comparison.

## 2\. Collect a report during the problem

For current Paper versions that bundle spark, Paper documents a profiler command:

```
/spark profiler start --timeout 600
```

The profiler records for the specified interval and returns a report link. Use a window representative of the reported issue: active farms, multiple players or new-world exploration. A profile of an empty lobby is unlikely to explain a peak-hour issue.

For spikes on compatible Paper releases, the [official troubleshooting documentation](https://docs.papermc.io/paper/basic-troubleshooting/) also describes options for collecting slow-tick samples. Review support for your actual version before copying commands.

## 3\. Understand the call tree

![Official spark viewer example showing how to expand the server-thread call tree](https://spark.lucko.me/docs/assets/images/viewer-tree-expand-4de88a0acbdc5bbcd39e8490293fa8f3.png)

_Screenshot from the [spark viewer documentation](https://spark.lucko.me/docs/Using-the-viewer). It illustrates the interface; it is not a ZCraft server benchmark._

The viewer groups samples into threads and nested method calls. Open the relevant server-thread path and follow branches that account for relatively large proportions of measured time.

A thread spending time sleeping is not necessarily problematic. Focus on work performed in the game tick and related scheduled tasks.

## 4\. Interpret expensive paths carefully

| Common pattern | Possible investigation |

| --- | --- |

| Chunk and generation work | Pregeneration and exploration rate |

| Entity ticking | Mobs, villagers and concentrated farms |

| Scheduler tasks | Plugin workload and scheduling |

| Redstone or block entities | Hoppers, machines and automation |

| Garbage collection | Heap pressure and allocation behavior |

The percentage a method occupies describes its share of profiled samples in that context. It is not automatically proof that a plugin is faulty. A plugin may be responding to legitimate heavy gameplay.

## 5\. Find the owner of the workload

Use the viewer's nested methods and, when available, its plugin/source grouping. Record the specific class or feature and connect it to real game activity. For example, an expensive claim check only during massive block-editing operations is different from a constant tick task every moment.

Don't remove a plugin just because its name appears somewhere in the stack trace.

## 6\. Run a controlled fix experiment

Write down a baseline: server build, player count, location, active entities and the profiler report URL. Change one variable in staging or during scheduled maintenance. Recreate the same activity and compare MSPT alongside the new profile.

A change that makes the profiler percentage smaller but increases total tick time may not be an improvement. Track the overall player experience and game workload too.

## 7\. Common profiling mistakes

- Profiling while the lag is not happening.
- Confusing networking lag with simulation lag.
- Treating the largest method name as definitive blame.
- Comparing one report from a full SMP with another from an empty server.
- Publishing reports without reviewing their contents.
- Changing Java flags, plugins and world settings simultaneously.

## When to investigate memory instead

Java heap exhaustion, process memory limits and native memory allocation have their own diagnostics. Some memory problems cause poor tick behavior, but not every slow server needs more RAM.

Read [Java and RAM Errors](https://www.zcraftstudios.com/blog/minecraft-java-heap-ram-errors).

## A repeatable report template

| Field | Example description |

| --- | --- |

| Report period | Recording session and time |

| Player load | Concurrent players and major events |

| Primary symptom | Slow ticks during world exploration |

| Expensive path | Specific call path in report |

| Tested change | Pregenerate planned exploration area |

| After result | MSPT comparison at similar load |

## Further reading

- [PaperMC Profiling Guide](https://docs.papermc.io/paper/profiling/)
- [spark Viewer Documentation](https://spark.lucko.me/docs/Using-the-viewer)
- [World Pregeneration Before Launch](https://www.zcraftstudios.com/blog/minecraft-world-pregeneration-launch-guide)
- [How to Fix Minecraft Server Lag](https://www.zcraftstudios.com/blog/reduce-minecraft-server-lag)

**Bottom line:** Spark turns performance advice from guesses into testable explanations. Collect during real load and verify before deciding an optimization worked.

## Continue reading

- [Read Minecraft Crash Reports and Find the Bad Plugin](https://www.zcraftstudios.com/blog/minecraft-server-crash-report-guide)
- [In-Game Report System Setup for Minecraft Servers](https://www.zcraftstudios.com/blog/minecraft-server-report-system-setup)

[ Previous guide Discord Ticket Systems for Minecraft Server Support](https://www.zcraftstudios.com/blog/minecraft-server-discord-ticket-workflow)[ Next guide PaperMC Config Files Explained: Global and Per-World](https://www.zcraftstudios.com/blog/minecraft-paper-configuration-files-explained)
