Reading a spark report without getting lost

Performance & Lag Reviewed September 6, 2026 2 min read

A profiler tells you where the tick's time went. The report looks intimidating because it is a full call tree, but you only ever need to read it one way: top down, following the biggest percentage.

Producing a useful profile

  1. Profile while it is bad

    /spark profiler start, then wait for the problem. A profile of a healthy server tells you what a healthy server does, which is not what you asked.

  2. Let it run for a few minutes

    Thirty seconds catches a spike; five minutes catches a pattern. For an intermittent problem, longer is better.

  3. Stop it and open the link

    /spark profiler stop gives you a web viewer. Nothing needs installing to read it.

The three shapes you will see

ShapeMeans
One plugin high in the treeThat plugin. Read the method name — it usually says what it was doing.
Entity or block-entity ticking dominatingA farm, a storage room, or too much loaded. Not a plugin problem.
Time spread thin across everythingYou are simply at capacity for the plan. This is the case where a bigger plan is the honest answer.
A high percentage is not automatically a fault

If the server is healthy, something still has to be the largest item in the tree — that is arithmetic, not a bug. Percentages matter when TPS is actually below 20. Optimising the top entry of a profile taken on a 20 TPS server is chasing nothing.

Check /spark health before profiling

It shows TPS, tick duration and memory in one screen. If tick duration is fine and memory is at the ceiling, your problem is garbage collection and a profile of the tick will not show it.

About Timings

Older guides tell you to use /timings. Paper has moved away from it in favour of spark, and on recent versions the command may not exist at all. If a guide leads with Timings, check its date before following the rest of it.