What lag looks like in a spark profile

We ran a real test server, caused one kind of lag at a time, and recorded a spark profile of each. This is what came back.

The results

What we didTypical tickTPSTop cause in the profile
Nothing, idle flat world0.8 ms19.9Nothing. Server thread idle 97% of the time
3,000 cows in forced chunks40.9 ms19.2Mobs pushing and colliding, 49%
500 villagers13.3 ms20.0Villagers, 88%
6,000 dropped items10.1 ms20.0Dropped items, 80%
About 9,200 hoppers between chests2.2 ms20.0Hoppers, 54%
Observer clocks across 225 by 225 blocks1.2 ms16.4Redstone, 99%
30 repeating command blocks using @e129.9 ms10.0Commands and datapack functions, 97%
Force-loading new land from the console3.2 ms17.3Waiting for a chunk to be ready, 70%
Test plugin burning 70 ms of CPU each tick70.8 ms14.0LagMaker, 97%
Test plugin sleeping 80 ms each tick84.6 ms12.3LagMaker, 98%
Test plugin allocating 100 MB each tick, 768 MB heap10.9 ms19.9LagMaker, 85%. Collector statistics: Pauses took about 5% of the server's time.

Paper 26.3 on a shared laptop (Intel i7-11370H, other work running), no players connected, 60 second profiles with spark's Java sampler. These numbers show the shape of each problem. They are not a benchmark, and your server will differ.

What this shows

Wrong guesses to avoid

Try it on yours

Paste your spark link into the explainer and it reads the profile for you.