Benchmark Report
Tick spikes · Mob AI
The worst ticks are several times the mean. Average TPS stays fine while players feel the stutter.
- mspt_avg = 32.1 ms
- mspt_p99 = 78.64 ms
- spike_ratio = 2.45 ratio
- sample_count = 111 count
- spike_ticks = 16 count
- spike_window_ticks = 498 count
- spike_threshold_ms = 60.3 ms
- spike_ticks_with_gc = 0 count
- spike_ticks_with_throttle = 0 count
- spike_ticks_with_steal = 0 count
- spike_tick_ms = 1,986.3 ms
- spike_gc_pause_ms = 0 ms
- spike_throttled_ms = 0 ms
- spike_sample_interval_ms = 40 ms
- explained_share_threshold = 0.5 ratio
- explained_time_share_threshold = 0.25 ratio
Weakest test: Chunk Ticking, 19.61 TPS on average. The 15 other tests hold at least 19.68 TPS.
Compared with other servers
Every measured server counts here, including private, anonymous and expired reports. Each server counts once, with its best run.
This report scores better than
86%
of the 9 servers running Paper & forks
Total score 111,525 · group median 85,678
Top quarter- Single Core
Better than 74% · 139,792 vs median 104,683
- Gameplay
Better than 88% · 78,094 vs median 62,624 · Top quarter
- Exploration
Better than 75% · 89,146 vs median 81,949 · Top quarter
- Entities
Better than 88% · 118,361 vs median 68,912 · Top quarter
- Mechanics
Better than 88% · 46,861 vs median 46,275 · Top quarter
- Hardware
Better than 87% · 48,675 vs median 36,859 · Top quarter
- Memory
Better than 52% · 22,730 vs median 21,046
- Disk
Better than 56% · 49,135 vs median 44,420
- Multi-Core
Better than 88% · 100,420 vs median 67,413 · Top quarter
Test by test
Each tick test's average MSPT (lower is better) and TPS, against the same group, each server with the same run as above. A test shows when at least 5 servers of the group passed it. The bar follows the MSPT.
- Block Physics
Better than 68% · MSPT 12.7 ms vs median 17 ms · TPS 20 vs median 20
- Bone Meal Growth
Better than 85% · MSPT 1.4 ms vs median 2.1 ms · TPS 20 vs median 20 · Top quarter
- Chunk Loading
Better than 88% · MSPT 3.5 ms vs median 4.3 ms · TPS 19.8 vs median 19.7 · Top quarter
- Chunk Ticking
Better than 68% · MSPT 17.5 ms vs median 18.4 ms · TPS 19.6 vs median 20
- Explosion
Better than 31% · MSPT 6 ms vs median 5.2 ms · TPS 19.9 vs median 19.9
- Hopper
Better than 75% · MSPT 2.1 ms vs median 3 ms · TPS 19.9 vs median 19.9 · Top quarter
- Lighting Update
Better than 82% · MSPT 1.8 ms vs median 2.4 ms · TPS 20 vs median 20 · Top quarter
- Mob AI
Better than 88% · MSPT 32.1 ms vs median 180.4 ms · TPS 19.7 vs median 6.8 · Top quarter
- Redstone
Better than 61% · MSPT 18.9 ms vs median 24.7 ms · TPS 19.9 vs median 18.5
- Ticking Tile Entities
Better than 65% · MSPT 3 ms vs median 3.9 ms · TPS 20 vs median 20
- World Save
Better than 88% · MSPT 0.8 ms vs median 1.8 ms · TPS 20 vs median 20 · Top quarter
Scored with version 8.3.0 of the scoring rules. Groups of fewer than 5 servers are never used. Updated Oct 27, 2026, 6:40 AM UTC. Community trends · All measurements by CPU
What matters
Read from the measurements, never estimatedNon-default server configuration
Compare with care against a server running default settings.
- view-distance 6 (default 10)
- simulation-distance 4 (default 10)
- spawn-limit.monster 5 (default 70)
+6 more modified settings
Tick spikes
The worst ticks are several times the mean. Average TPS stays fine while players feel the stutter.
- mspt_avg = 32.1 ms
- mspt_p99 = 78.64 ms
- spike_ratio = 2.45 ratio
- sample_count = 111 count
- spike_ticks = 16 count
- spike_window_ticks = 498 count
- spike_threshold_ms = 60.3 ms
- spike_ticks_with_gc = 0 count
- spike_ticks_with_throttle = 0 count
- spike_ticks_with_steal = 0 count
- spike_tick_ms = 1,986.3 ms
- spike_gc_pause_ms = 0 ms
- spike_throttled_ms = 0 ms
- spike_sample_interval_ms = 40 ms
- explained_share_threshold = 0.5 ratio
- explained_time_share_threshold = 0.25 ratio
›+5 more findings
The run started on a JVM that had just started, or that had not run a bench since it started: code was still being compiled and the heap still growing. The first run after a restart can differ from the next ones.
- jvm_uptime_s = 167 s
- bench_runs_since_start = 0 count
- threshold_s = 300 s
explosionThe reference computation, timed just before this test and just before the next one, ran markedly slower than the run's reference, the best of its start, middle and end timings (or the hypervisor stole CPU time during the test): this test did not get the processor the rest of the run got. For a scored benchmark, the server's run statistics leave this run out of the scores this test feeds, and keep it for the others when their own tests ran in stable windows. The run's own verdict does not change.
- window_slowdown_percent = 17.07 %
- threshold_percent = 15 %
- probe_basis_median = 1
- probe_noise_percent = 2.82 %
- reference_best_ms = 13.18 ms
- opening_best_ms = 13.68 ms
- opening_judged_ms = 15.43 ms
- closing_best_ms = 13.66 ms
- closing_judged_ms = 14.48 ms
- steal_percent = 0 %
- steal_threshold_percent = 5 %
mobAIThe reference computation, timed just before this test and just before the next one, ran markedly slower than the run's reference, the best of its start, middle and end timings (or the hypervisor stole CPU time during the test): this test did not get the processor the rest of the run got. For a scored benchmark, the server's run statistics leave this run out of the scores this test feeds, and keep it for the others when their own tests ran in stable windows. The run's own verdict does not change.
- window_slowdown_percent = 17.68 %
- threshold_percent = 15 %
- probe_basis_median = 1
- probe_noise_percent = 2.82 %
- reference_best_ms = 13.18 ms
- opening_best_ms = 13.66 ms
- opening_judged_ms = 15.51 ms
- closing_best_ms = 13.05 ms
- closing_judged_ms = 13.32 ms
- steal_percent = 0 %
- steal_threshold_percent = 5 %
tickingTileEntityThe reference computation, timed just before this test and just before the next one, ran markedly slower than the run's reference, the best of its start, middle and end timings (or the hypervisor stole CPU time during the test): this test did not get the processor the rest of the run got. For a scored benchmark, the server's run statistics leave this run out of the scores this test feeds, and keep it for the others when their own tests ran in stable windows. The run's own verdict does not change.
- window_slowdown_percent = 17.68 %
- threshold_percent = 15 %
- probe_basis_median = 1
- probe_noise_percent = 2.82 %
- reference_best_ms = 13.18 ms
- opening_best_ms = 13.7 ms
- opening_judged_ms = 14.01 ms
- closing_best_ms = 13.66 ms
- closing_judged_ms = 15.51 ms
- steal_percent = 0 %
- steal_threshold_percent = 5 %
worldSaveThe reference computation, timed just before this test and just before the next one, ran markedly slower than the run's reference, the best of its start, middle and end timings (or the hypervisor stole CPU time during the test): this test did not get the processor the rest of the run got. For a scored benchmark, the server's run statistics leave this run out of the scores this test feeds, and keep it for the others when their own tests ran in stable windows. The run's own verdict does not change.
- window_slowdown_percent = 17.07 %
- threshold_percent = 15 %
- probe_basis_median = 1
- probe_noise_percent = 2.82 %
- reference_best_ms = 13.18 ms
- opening_best_ms = 13.25 ms
- opening_judged_ms = 13.95 ms
- closing_best_ms = 13.68 ms
- closing_judged_ms = 15.43 ms
- steal_percent = 0 %
- steal_threshold_percent = 5 %
A finding stays silent rather than attribute a cause without evidence. An absent cause is an answer, not an omission.
Test by test
Problems first — select a row for the full test- Chunk TickingExploration19.61StableUnstable
- Mob AIEntities19.68UnstableUnstable
- Chunk LoadingExploration19.84UnstableUnstable
- RedstoneSingle-Core Stress19.88effective 20.0ModerateUnstable
- ExplosionMechanics19.94ModerateUnstable
- HopperMechanics19.94StableHealthy
- Memory PerformanceMemory & Storage19.96StableHealthy
- Multi-Core CPUCPU19.98StableHealthy
- Block PhysicsSingle-Core Stress20.00StableHealthy
- Bone Meal GrowthMechanics20.00StableHealthy
- Disk PerformanceMemory & Storage20.00StableHealthy
- Lighting UpdateExploration20.00StableHealthy
- Network (NBT)Network20.00ModerateHealthy
- Single-Core (tick-aligned)CPU20.00StableHealthy
- Ticking Tile EntitiesMechanics20.00StableHealthy
- World SaveMechanics20.00StableHealthy
Settings your measurements justify
Each setting below is triggered by a measurement from this report, and names the test to replay to find out whether it helped.
Nothing to change: no measurement in this report crosses a threshold where a documented setting would help.
Java start-up line
The options this server was started with, checked against its Java version. Corrections fix what is certainly wrong; leads to test are settings to measure, never applied for you.
Current line (78 arguments)
Values of system properties, agents and file paths are never shown: they appear as <redacted>.
-Xms8192M -Xmx14336M -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=10 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1MixedGCCountTarget=3 -XX:InitiatingHeapOccupancyPercent=20 -XX:G1MixedGCLiveThresholdPercent=90 -XX:SurvivorRatio=32 -XX:G1HeapWastePercent=5 -XX:MaxTenuringThreshold=1 -XX:+PerfDisableSharedMem -XX:G1SATBBufferEnqueueingThresholdPercent=30 -XX:G1ConcMarkStepDurationMillis=5 -XX:G1RSetUpdatingPauseTimePercent=0 -XX:+UseNUMA -XX:-DontCompileHugeMethods -XX:MaxNodeLimit=240000 -XX:NodeLimitFudgeFactor=8000 -XX:ReservedCodeCacheSize=400M -XX:NonNMethodCodeHeapSize=12M -XX:ProfiledCodeHeapSize=194M -XX:NonProfiledCodeHeapSize=194M -XX:NmethodSweepActivity=1 -XX:+UseFastUnorderedTimeStamps -XX:+UseCriticalJavaThreadPriority -XX:AllocatePrefetchStyle=3 -XX:+AlwaysActAsServerClassMachine -XX:+UseTransparentHugePages -XX:LargePageSizeInBytes=2M -XX:+UseLargePages -XX:+EagerJVMCI -XX:+UseStringDeduplication -XX:+UseAES -XX:+UseAESIntrinsics -XX:+UseFMA -XX:+UseLoopPredicate -XX:+RangeCheckElimination -XX:+OptimizeStringConcat -XX:+UseCompressedOops -XX:+UseThreadPriorities -XX:+OmitStackTraceInFastThrow -XX:+RewriteBytecodes -XX:+RewriteFrequentPairs -XX:+UseFPUForSpilling -XX:+UseFastStosb -XX:+UseNewLongLShift -XX:+UseVectorCmov -XX:+UseXMMForArrayCopy -XX:+UseXmmI2D -XX:+UseXmmI2F -XX:+UseXmmLoadAndClearUpper -XX:+UseXmmRegToRegMoveAll -XX:+EliminateLocks -XX:+DoEscapeAnalysis -XX:+AlignVector -XX:+OptimizeFill -XX:+EnableVectorSupport -XX:+UseCharacterCompareIntrinsics -XX:+UseCopySignIntrinsic -XX:+UseVectorStubs -XX:UseSSE=4 -XX:+UseFastJNIAccessors -XX:+UseInlineCaches -XX:+SegmentedCodeCache --add-modules=jdk.incubator.vector -Dterminal.jline=false -Dterminal.ansi=true -DLeaf.enableFMA=<redacted> -DLeaf.disable-vanilla-profiler=<redacted> -DLeaf.disable-vanilla-debug-feature=<redacted>
Nothing to correct: every option is valid for Java 25.
To test
Performance settings to try one at a time, then measure with a benchmark before and after. None of them is applied in the corrected line, and none comes with a promised gain.
Settings documented by PaperMC for Minecraft servers: they size G1's young generation for the game's very high allocation rate and start collections earlier. Initial and maximum heap at the same size, with AlwaysPreTouch, commit the whole heap at start-up: proposed only because that heap already stays under the memory limit.
-Xms14336M -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1RSetUpdatingPauseTimePercent=5No measurement of this run points to it: it stays a lead to measure.
sourceA collector with very short pauses for large heaps, at the cost of more CPU and memory. It replaces the current collector: remove the current collector option and its own tuning options, then measure. From Java 23 the generational mode is the default.
-XX:+UseZGCNo measurement of this run points to it: it stays a lead to measure.
sourceRe-run and compare
- Apply the corrected line where your server starts (panel start-up parameters, start.sh).
- Restart the server.
- Run a new benchmark:
/bench start - Compare the new report with this one.
This report is the before; add the new report to the comparison once it is in. A single run on each side says little: the gap between two runs of an unchanged server is noise.
Run conditions
What the plugin saw of the host during the benchmark, and what the site concludes from it. The plugin reports facts; the verdicts and their thresholds are the site's, the same ones the diagnosis and the API use.
The reference computation timed during the run kept its pace, and the hypervisor took no significant CPU time.
A CPU quota, a reduced CPU set or a memory limit applies to the server.
Contention during the run
- Reference computation slowdown
- 5.4 % (threshold 15 %)3 timings: 13.7 ms · 13.9 ms · 13.2 ms (a slow first timing alone does not count) — judged on the median of at least 40 samples per timing (plugin 2.6.2); host noise 2.8 %, the threshold widens to it, from 15 to 30 % — wait for the server to settle before Hopper, after chunk loading: 0.0 s (limit 30.0 s, after chunk generation)
- CPU time stolen by the hypervisor
- 0 % (threshold 5 %)
- Scheduling periods ended throttled by the quota
- not measured (threshold 25 %)0 ms
- Time a task waited for a core
- 0.7 % (threshold 40 %)
Limits seen by the server
- CPU quota
- none (no limit at any level)
- CPU set
- 0-15 (16 cores)
- Memory limit
- 21.6 GiB
- Host logical CPUs
- 16
- Host memory
- 31.3 GiB
- Container signals
- dockerenv, cgroup-v2-namespace, overlay-root, pterodactyl-env
Storage
- Filesystem
- ext4 · Local filesystem
- Direct 4K reads
- Honoured (96.9 µs against 0.7 µs from cache)
Single-core measurement
- Throughput (wall clock)
- 512.8M ops/s519.8M ops/s over the thread's CPU time
- Thread CPU time / wall time
- 0.986 (threshold 0.900)Below 1, the thread was not running for part of its slices (quota, neighbours, hypervisor steal when counted, JVM pauses). Close to 1 proves nothing.
- Spread from second to second
- 6.4 % (threshold 40 %)p10 503.6M · p50 524.1M · p90 537.1M ops/s over 9 seconds
- GC pauses during the measurement
- 0 ms (threshold 50 ms)0 collections, 0 ms of collection time
- Highest current CPU frequency
- not exposed by this systemadvertised maximum: 4,300 MHz
Witnesses of the single-core test (plugin 2.5.0). The score does not read this test, and none of these figures changes the run's stability verdict.
Host, memory and server state
- Time a task waited for storage
- 7.5 % (all tasks at once: 7.3 %)includes the disk test, which waits for storage by design: not judged for the run
- Time a task stalled on memory
- 0 % (all tasks at once: 0 %) (threshold 5 %)
- CPU quota during the run
- not measuredno change observed
- Container memory
- peak 14,194 MiBlimit events: high 0 · max 0 · OOM kills 0
- Runnable tasks on the machine
- up to 15 on average during a test, for 16 logical CPUs
- Host uptime at the start
- 21.4 h
- Server at the start of the run
- JVM up for 2.8 minfirst bench since the JVM startedoutside the bench world: 0 players · 289 chunks · 122 entities
Run pressures from plugin 2.4.0, the rest from plugin 2.6.0. None of these figures changes the score or the run's stability verdict; the diagnosis names the tests they concern.
Thresholds and their reasons are published in the benchmark methodology. Rules rc-6.
Every measurement
Each test in full. Tests in trouble are open; the others fold to their summary line.
Single-Core Stress
RedstoneUnstable19.88 TPS18.9 ms35.0s
Single-core stress via intensive redstone circuit updates.
- Heavy garbage collection5 collections, 115ms total
- The run did not hold steadyTPS P1=15.00<15
Percentiles and stability
Raw data (67 fields)
Block PhysicsHealthy20.00 TPS12.7 ms24.9s
Single-core stress via falling-block physics.
Percentiles and stability
Raw data (66 fields)
Exploration
Chunk LoadingUnstable19.84 TPS3.5 ms8.2s
Chunk generation and loading speed across dispersed zones.
- Heavy garbage collection3 collections, 227ms total
- The run did not hold steadyTPS P1=15.00<15
Percentiles and stability
Raw data (58 fields)
Chunk TickingUnstable19.61 TPS17.5 ms40.9s
Server performance when ticking many loaded chunks with random tick updates.
- Heavy garbage collection5 collections, 133ms total
- The run did not hold steadyTPS P1=14.98<15
Percentiles and stability
Raw data (62 fields)
Lighting UpdateHealthy20.00 TPS1.8 ms24.7s
Lighting recomputation throughput on block place / break.
Percentiles and stability
Raw data (54 fields)
Entities
Mob AIUnstable19.68 TPS32.1 ms30.4s
Complex mob AI behaviours (villagers, iron golems, hostile mobs).
- Heavy garbage collection5 collections, 142ms total
- The run did not hold steadyTPS P1=15.00<15, TPS min=10.00 (51% of avg)
Percentiles and stability
Raw data (76 fields)
Mechanics
HopperHealthy19.94 TPS2.1 ms19.3s
Intensive hopper chain item transfers.
- Heavy garbage collection6 collections, 93ms total
Percentiles and stability
Raw data (68 fields)
ExplosionUnstable19.94 TPS6.0 ms17.0s
Massive TNT explosions and block destruction.
- Heavy garbage collection3 collections, 21ms total
- The run did not hold steadyTPS P1=15.00<15
Percentiles and stability
Raw data (110 fields)
Ticking Tile EntitiesHealthy20.00 TPS3.0 ms36.0s
Many ticking tile entities (furnaces, hoppers, etc.).
Percentiles and stability
Raw data (55 fields)
World SaveHealthy20.00 TPS0.8 ms4.8s
World save speed and TPS impact during save operations.
Percentiles and stability
Raw data (53 fields)
Bone Meal GrowthHealthy20.00 TPS1.4 ms23.3s
Rapid crop and tree growth via bone meal.
Percentiles and stability
Raw data (57 fields)
CPU
Single-Core (tick-aligned)Healthy20.00 TPS2.9 ms10.0s
Single-thread compute throughput measured on the main thread under the tick scheduler.
Percentiles and stability
Raw data (58 fields)
Multi-Core CPUHealthy19.98 TPS1.0 ms9.4s
Parallel computation throughput across worker threads.
Percentiles and stability
Raw data (53 fields)
Memory & Storage
Memory PerformanceHealthy19.96 TPS0.9 ms29.3s
RAM bandwidth and latency.
JVM measurements — do not reflect actual bare-metal performance.
- Heavy garbage collection5 collections, 44ms total
Percentiles and stability
Raw data (57 fields)
Disk PerformanceHealthy20.00 TPS1.0 ms65.0s
Sequential and random 4K read/write performance.
JVM measurements — do not reflect actual bare-metal performance.
Percentiles and stability
Raw data (52 fields)
Network
Network (NBT)Healthy20.00 TPS24.4 ms20.0s
Serialisation throughput — proxy for the rate at which the server can ship world data to clients.
- Heavy garbage collection7 collections, 71ms total
Percentiles and stability
Raw data (53 fields)
›Machine and serverAMD Ryzen 9 9950X 16-Core Processor · Purpur · 1.21.11
Score Breakdown
Detailed sub-category scores