Direct answer

20 TPS on an empty server proves very little about capacity. A realistic benchmark needs players or representative automated activity, existing chunks, entities, plugins and controlled measurements.

Build two baselines

  1. Measure a quiet, warmed-up baseline and record version, software, plugin/mod set, Java version, world state, view and simulation distance.
  2. Repeat under a representative busy period with real player actions: movement, entity farms, storage, redstone and chunk access relevant to your server.
  3. Run /spark tps for median and high-percentile MSPT, then /spark profiler start --timeout 120 during the busy run to find actual hotspots.

Avoid misleading test conditions

Compare the same world and player count across software/config changes. Pregenerated terrain behaves differently from unexplored terrain. A benchmark after clearing entities or disabling plugins does not predict full production behavior. Idle TPS hides small headroom and occasional expensive ticks.

Version and safety notes

Paper-style global MSPT does not describe every workload on Folia. Compare representative region and player activity when using regionized servers.

Interpret results

Document the workload that crosses your acceptable latency threshold, not just a claimed maximum player number. For a normal 20 TPS tick loop, sustained MSPT near or above 50 ms leaves little room for spikes. Folia region results need region-aware interpretation instead of one global number.

References

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