zerve.gg
Back to blog

Case Study: The Same Root Cause at Two Severity Levels on an AllTheMons Server

A server admin running AllTheMons, a Cobblemon-based modpack, posted to r/admincraft with a title that undersells the problem: “AllTheMons Private Server for friends lagging bad.” Only 5 players, NeoForge 21.1.234 on Minecraft 1.21.1, a 12-core i5-12600K, 12GB heap. TPS had dropped to 9.7, roughly half of the 20 TPS target. (New to Spark profiles? Our guide to reading a Spark profiler report explains the terms and views referenced below.)

What made this case useful was not just the diagnosis. The same admin later shared a second profile from the same server, captured hours apart, in a milder state at TPS 18.9. Two snapshots of the same underlying problem at different severities gave us something rare: a way to check whether the diagnosis was actually stable, or just a plausible-looking guess from one data point.

The severe capture: TPS 9.7

The first profile showed a server in real distress. Median MSPT was 94.4ms, nearly double the 50ms tick budget, with a max tick spike of 7,505ms. 1,624 entities were loaded, 75% of them in the overworld.

Running this through call-tree analysis produced 17 findings. Rather than one dominant cause, the hotpath breakdown told a layered story:

Every one of these categories points at the same underlying condition: too many entities, spawning too fast, for a Pokemon-style modpack that intentionally populates the world with wild Cobblemon. Five players is not the stress factor here. The world itself is.

The milder capture: TPS 18.9

The second profile, taken from the same server at a calmer moment, told a strikingly similar story at lower amplitude. TPS was 18.9, essentially healthy. Median MSPT was 47.9ms, right at the edge of budget. Max tick spike was 1,761ms, down from 7,505ms. Entity count was 1,533, close to the severe capture’s 1,624.

The hotpath breakdown:

CategorySevere (TPS 9.7)Mild (TPS 18.9)
Entity ticking54.7%50.7%
— Cobblemon share of entity ticking14.8%13.9%
Chunk ticking24.5%23.4%

The shape of the breakdown barely moved, only the absolute tick cost did. That consistency is the actual evidence here. If the severe capture’s diagnosis had been a coincidence, a fluke reading from one bad tick window, the milder capture would not have reproduced nearly the same percentages under a completely different load moment. Instead, the same rule engine, run against two independent profiling windows hours apart, converged on the same root cause every time.

Why this matters more than a single profile would

A single Spark profile can tell you what a server’s main thread was doing during the sampling window. It cannot, by itself, tell you whether that pattern is a persistent structural cost or a temporary blip that happened to land in the profile. The only way to distinguish the two is to profile again, at a different point, and compare.

Most admins don’t do this. They pull one profile, chase the top line item, and move on. This pair happened to exist because the same person captured both, which let us treat it as a natural experiment: same server, same modpack, same mods, two different load conditions. When the diagnosis holds up across both, you can be confident it is not an artifact of one unlucky sampling window.

For a Cobblemon-based pack specifically, this is also a useful baseline for anyone running the same modpack. Entity ticking dominating at roughly half the main thread, with chunk ticking a distant second and natural spawning close behind, looks like the expected fingerprint of this pack under normal-to-heavy load. If your own AllTheMons server shows a wildly different shape, for example command execution or plugin events dominating instead, that is a signal something outside the pack itself is the actual problem.

Takeaways

For a case where the dominant cost wasn’t entities at all, see our case study on a datapack silently dropping TPS on a 5-player server, where the culprit was /execute commands running every tick.


Want to see how your own server’s hotpath breaks down? Paste your Spark report into our analyzer for a free, instant diagnosis, no signup required.