Direct answer

Profile while the slow operation is actually happening. Profiles collected when the server is empty are unlikely to explain peak-hour lag.

Capture a useful sample

  1. Note the timestamp, software/version, player count, active worlds, TPS/MSPT and what players are doing.
  2. On a supported Paper server, run /spark profiler start --timeout 120 just before a predictable busy interval; choose a duration long enough to include the issue without unnecessary collection.
  3. After the profiler ends, open the generated report and inspect which thread and stack dominate the recorded activity. Do not assume a high count for one plugin proves causation without looking at context.
  4. For intermittent spikes, consider spark tick-monitoring or slow-tick filtering documented for the installed spark version.

Keep comparisons fair

Do not remove mobs, restart, or change JVM flags between the baseline and sample unless that is the single variable being tested. Profiling a migration or chunk pregeneration is different from profiling a steady state.

Version and safety notes

spark commands and permissions can vary by platform and release. Review report URLs before sharing because diagnostic information can expose private server details.

Share responsibly

Profile links can expose plugin names, environment characteristics and occasionally sensitive server details. Review them before posting publicly. Capture a second comparable sample after a targeted fix and compare MSPT percentile improvement alongside gameplay behavior.

References

Check documentation for the versions and hosting environment you actually run.