Benchmark Report
Main thread saturated · Redstone
One game thread is already over its tick budget under the benchmark's own load. Players and redstone will push it further.
- mspt_avg = 57.6 ms
- mspt_target = 35 ms
- tps_avg = 17.36 tps
- tps_held_threshold = 18 tps
Weakest test: Mob AI, 3.64 TPS on average. The 15 other tests hold at least 17.36 TPS.
Compared with other servers
The comparison with other servers uses reports scored with version 8.3.0 of the scoring rules. This report was scored with another version, so its score is not comparable.
What matters
Read from the measurements, never estimatedMain thread saturated
One game thread is already over its tick budget under the benchmark's own load. Players and redstone will push it further.
Likely cause: single core
- mspt_avg = 57.6 ms
- mspt_target = 35 ms
- tps_avg = 17.36 tps
- tps_held_threshold = 18 tps
Tick spikes
The worst ticks are several times the mean. Average TPS stays fine while players feel the stutter.
- mspt_avg = 274.6 ms
- mspt_p99 = 1,233.95 ms
- spike_ratio = 4.49 ratio
- sample_count = 69 count
Non-default server configuration
Compare with care against a server running default settings.
- view-distance 6 (default 10)
- simulation-distance 4 (default 10)
›+1 more finding
blockPhysicssingle coreOne game thread is already over its tick budget under the benchmark's own load. Players and redstone will push it further.
- mspt_avg = 50 ms
- mspt_target = 35 ms
- tps_avg = 20 tps
- tps_held_threshold = 18 tps
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- Mob AIEntities3.64UnstableCritical
- RedstoneSingle-Core Stress17.36UnstableCritical
- Network (NBT)Network19.94StableUnstable
- Lighting UpdateExploration19.64StableHealthy
- Chunk LoadingExploration19.79StableHealthy
- World SaveMechanics19.80StableHealthy
- Bone Meal GrowthMechanics19.95StableHealthy
- Chunk TickingExploration19.97ModerateHealthy
- HopperMechanics19.97StableHealthy
- Ticking Tile EntitiesMechanics19.97StableHealthy
- ExplosionMechanics19.99ModerateHealthy
- Block PhysicsSingle-Core Stress20.00StableHealthy
- Disk PerformanceMemory & Storage20.00StableHealthy
- Memory PerformanceMemory & Storage20.00StableHealthy
- Multi-Core CPUCPU20.00StableHealthy
- Single-Core (tick-aligned)CPU20.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.
Shrink the monster activation range
world-settings.default.entity-activation-range.monsters: 24Measured : mobAI.mspt.avg 274.6 ms (threshold 35.0 ms)
Mob AI costs more per tick than the budget allows. The activation range decides how far from a player a monster keeps thinking; shrinking it puts distant ones to sleep without removing them.
Test to replay : mobAI
Cap the TNT processed per tick
world-settings.default.max-tnt-per-tick: 40Measured : explosion.mspt.avg 50.0 ms (threshold 35.0 ms)
Explosions cost more per tick than the budget allows. Capping how many primed entities are processed per tick spreads a large blast over several ticks instead of one long freeze.
Test to replay : explosion
Lower the monster spawn limit
spawn-limits.monsters: 50Currently : 70
Measured : mobAI.mspt.avg 274.6 ms (threshold 50.0 ms)
Mob AI is past the critical cost per tick, where shrinking the activation range is no longer enough. The spawn limit caps how many monsters exist per player at all, which is the only setting here that reduces the work rather than deferring it.
Test to replay : mobAI
These settings trade a little gameplay fidelity for tick budget. Apply one at a time and replay the named test: the effect stays a hypothesis until you have measured it.
Briefing for a language model
Paste this into the assistant of your choice to have it rewritten in prose. It already carries every number, so the model has none left to invent.
{
"format": "voxelbench.tuning.v1",
"instruction": "Rewrite each recommendation below as plain prose for a server operator. Every number you are allowed to use is already in this document: the measured value, its threshold, and the proposed setting. Do not compute, estimate or predict any other number, and never state an expected gain. Keep every setting name and value exactly as written.",
"server": {
"type": "folia",
"minecraft": "26.3",
"java": "25.0.5.0.3"
},
"recommendations": [
{
"id": "spigot.portee-activation-monstres",
"family": "spigot",
"measure": "mobAI.mspt.avg",
"value": 274.6,
"unit": "ms",
"threshold": 35,
"control_test": "mobAI",
"file": "spigot.yml",
"setting": "world-settings.default.entity-activation-range.monsters",
"proposed_value": "24",
"current_value": null
},
{
"id": "spigot.tnt-par-tick",
"family": "spigot",
"measure": "explosion.mspt.avg",
"value": 50,
"unit": "ms",
"threshold": 35,
"control_test": "explosion",
"file": "spigot.yml",
"setting": "world-settings.default.max-tnt-per-tick",
"proposed_value": "40",
"current_value": null
},
{
"id": "bukkit.limite-monstres",
"family": "bukkit",
"measure": "mobAI.mspt.avg",
"value": 274.6,
"unit": "ms",
"threshold": 50,
"control_test": "mobAI",
"file": "bukkit.yml",
"setting": "spawn-limits.monsters",
"proposed_value": "50",
"current_value": "70"
}
]
}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 (27 arguments)
Values of system properties, agents and file paths are never shown: they appear as <redacted>.
-XX:ThreadPriorityPolicy=1 -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCIProduct -XX:+EnableJVMCI -XX:-UnlockExperimentalVMOptions -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -Xmx11729M -Xms11729M
To correct
- To correctOption set more than once
-XX:+UnlockExperimentalVMOptionsThe JVM keeps only the last occurrence (-XX:+UnlockExperimentalVMOptions); the earlier ones do nothing but mislead whoever reads the line.
Corrected line to copy
- Removed
-XX:+UnlockExperimentalVMOptionsearlier occurrence; the JVM keeps -XX:+UnlockExperimentalVMOptions. - Removed
-XX:-UnlockExperimentalVMOptionsearlier occurrence; the JVM keeps -XX:+UnlockExperimentalVMOptions.
java -XX:ThreadPriorityPolicy=1 -XX:+EnableJVMCIProduct -XX:+EnableJVMCI -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Xmx11729M -Xms11729M -jar server.jar noguiReplace server.jar with your server's jar. Paste the line where your server is started: the start-up parameters (or JVM arguments) of your hosting panel, or your start.sh / start.bat. Only the corrections above differ from your current line.
Your current line also carries 2 other arguments (system properties, agents): keep them between java and -jar. Their values are not shown here.
Re-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
- 0.2 % (threshold 15 %)3 timings: 12.1 ms · 12.1 ms · 12.1 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 0.7 %, 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
- 1 % (threshold 25 %)73.6 ms
- Time a task waited for a core
- 0 % (threshold 40 %)
Limits seen by the server
- CPU quota
- 8 cores
- CPU set
- 0-31 (32 cores)
- Memory limit
- 16 GiB
- Host logical CPUs
- 8
- Host memory
- 16 GiB
- Container signals
- cgroup-v2-namespace, overlay-root
Storage
- Filesystem
- ext4 · Local filesystem
- Direct 4K reads
- Honoured (71.1 µs against 0.3 µs from cache)
Single-core measurement
- Throughput (wall clock)
- 825.5M ops/s825.5M ops/s over the thread's CPU time
- Thread CPU time / wall time
- 1.000 (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
- 3.5 % (threshold 40 %)p10 817.8M · p50 823.6M · p90 846.6M 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
- 5,645 MHz (8 CPUs read)advertised maximum: 5,456 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
- 2.8 % (all tasks at once: 2.7 %)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
- 8 coresno change observed
- Container memory
- peak 14,166 MiBlimit events: high 0 · max 0 · OOM kills 0
- Runnable tasks on the machine
- up to 7.9 on average during a test, for 8 logical CPUscontainer values (lxcfs): they say nothing about neighbours
- Server at the start of the run
- JVM up for 104.6 min6 benches before this oneoutside the bench world: 0 players · - chunks · - 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-7.
Every measurement
Each test in full. Tests in trouble are open; the others fold to their summary line.
Single-Core Stress
RedstoneCritical17.36 TPS57.6 ms39.7s
Single-core stress via intensive redstone circuit updates.
- Heavy garbage collection13 collections, 48ms total
- The run did not hold steadyTPS avg=17.36<19, TPS P1=15.00<15, TPS StdDev=2.49>2
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 1
- Seconds measured
- 21 s
- Median TPS
- 18.00 TPS
- Effective TPS
- 17.36 TPS
- Worst sustained MSPT
- 82.3 ms
- Time degraded
- 47.6 %
- Seconds degraded
- 10 s
- Ticks over budget
- 12.4 %
Raw data (51 fields)
Block PhysicsHealthy20.00 TPS50.0 ms25.1s
Single-core stress via falling-block physics.
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 1
- Seconds measured
- 13 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 20.00 TPS
- Worst sustained MSPT
- 50.0 ms
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.0 %
Raw data (48 fields)
Exploration
Chunk LoadingHealthy19.79 TPS50.5 ms12.8s
Chunk generation and loading speed across dispersed zones.
- Heavy garbage collection1 collections, 99ms total
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 8
- Seconds measured
- 11 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.69 TPS
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.8 %
Raw data (32 fields)
Chunk TickingHealthy19.97 TPS50.1 ms35.0s
Server performance when ticking many loaded chunks with random tick updates.
- Heavy garbage collection4 collections, 61ms total
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 1
- Seconds measured
- 28 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.97 TPS
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.3 %
Raw data (42 fields)
Lighting UpdateHealthy19.64 TPS50.9 ms8.5s
Lighting recomputation throughput on block place / break.
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 8
- Seconds measured
- 7 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.64 TPS
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.6 %
Raw data (39 fields)
Entities
Mob AICritical3.64 TPS274.6 ms30.2s
Complex mob AI behaviours (villagers, iron golems, hostile mobs).
- Heavy garbage collection5 collections, 146ms total
- The run did not hold steadyTPS avg=3.64<19, TPS P1=4.78<15
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 1
- Seconds measured
- 23 s
- Median TPS
- 4.00 TPS
- Effective TPS
- 3.64 TPS
- Worst sustained MSPT
- 810.1 ms
- Time degraded
- 100.0 %
- Seconds degraded
- 23 s
- Ticks over budget
- 100.0 %
Raw data (59 fields)
Mechanics
HopperHealthy19.97 TPS50.1 ms30.0s
Intensive hopper chain item transfers.
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 8
- Seconds measured
- 28 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.97 TPS
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.2 %
Raw data (36 fields)
ExplosionHealthy19.99 TPS50.0 ms6.6s
Massive TNT explosions and block destruction.
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 8
- Seconds measured
- 5 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.99 TPS
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.8 %
Raw data (84 fields)
Ticking Tile EntitiesHealthy19.97 TPS50.1 ms36.2s
Many ticking tile entities (furnaces, hoppers, etc.).
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 8
- Seconds measured
- 28 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.97 TPS
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.0 %
Raw data (37 fields)
World SaveHealthy19.80 TPS50.5 ms4.9s
World save speed and TPS impact during save operations.
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 1
- Seconds measured
- 3 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.80 TPS
- Worst sustained MSPT
- 50.0 ms
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.0 %
Raw data (35 fields)
Bone Meal GrowthHealthy19.95 TPS50.1 ms23.4s
Rapid crop and tree growth via bone meal.
Percentiles and stability
The regions of the test's zones. Each figure is the worst region's.
- Regions measured
- 1
- Seconds measured
- 22 s
- Median TPS
- 20.00 TPS
- Effective TPS
- 19.95 TPS
- Worst sustained MSPT
- 53.3 ms
- Time degraded
- 0.0 %
- Seconds degraded
- 0 s
- Ticks over budget
- 0.2 %
Raw data (39 fields)
CPU
Single-Core (tick-aligned)Healthy20.00 TPS2.1 ms10.0s
Single-thread compute throughput measured on the main thread under the tick scheduler.
Percentiles and stability
Raw data (35 fields)
Multi-Core CPUHealthy20.00 TPS0.1 ms7.5s
Parallel computation throughput across worker threads.
Percentiles and stability
Raw data (28 fields)
Memory & Storage
Memory PerformanceHealthy20.00 TPS0.1 ms24.0s
RAM bandwidth and latency.
JVM measurements — do not reflect actual bare-metal performance.
Percentiles and stability
Raw data (28 fields)
Disk PerformanceHealthy20.00 TPS0.1 ms102.6s
Sequential and random 4K read/write performance.
JVM measurements — do not reflect actual bare-metal performance.
Percentiles and stability
Raw data (27 fields)
Network
Network (NBT)Unstable19.94 TPS13.2 ms20.0s
Serialisation throughput — proxy for the rate at which the server can ship world data to clients.
- Heavy garbage collection5 collections, 19ms total
- The run did not hold steadyTPS P1=15.00<15
Percentiles and stability
Raw data (28 fields)
›Machine and serverAMD Ryzen 9 9950X3D2 16-Core Processor · Folia · 26.3
Score Breakdown
Detailed sub-category scores