Benchmark Report
CPU quota
The JVM sees far fewer cores than the host advertises. Everything that parallelises is bounded by the container, not by the machine.
- host_threads = 64 cores
- usable_cores = 4 cores
- core_ratio = 16 ratio
Weakest test: Mob AI, 5.72 TPS on average. The 15 other tests hold at least 16.93 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 estimatedCPU quota
The JVM sees far fewer cores than the host advertises. Everything that parallelises is bounded by the container, not by the machine.
Likely cause: CPU quota
- host_threads = 64 cores
- usable_cores = 4 cores
- core_ratio = 16 ratio
Tick spikes
The worst ticks are several times the mean. Average TPS stays fine while players feel the stutter.
- mspt_avg = 273.47 ms
- mspt_p99 = 989.7 ms
- spike_ratio = 3.62 ratio
- sample_count = 90 count
Tick spikes
The worst ticks are several times the mean. Average TPS stays fine while players feel the stutter.
- mspt_avg = 26.22 ms
- mspt_p99 = 55.76 ms
- spike_ratio = 2.13 ratio
- sample_count = 134 count
›+6 more findings
networkThe worst ticks are several times the mean. Average TPS stays fine while players feel the stutter.
- mspt_avg = 28.14 ms
- mspt_p99 = 57.34 ms
- spike_ratio = 2.04 ratio
- sample_count = 93 count
memorynot measuredNo access latency was published, so the score assumed an unfavourable one. Publishing the measurement can only help.
- assumed_latency_ns = 180 ns
- reference_latency_ns = 120 ns
disknot measuredDirect IO was refused by the host, so the random part of the disk score rests on an assumption rather than a measurement.
- assumed_random_mbps = 90 MB/s
- reference_random_mbps = 150 MB/s
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 = 46.18 ms
- mspt_target = 35 ms
- tps_avg = 19.23 tps
- tps_held_threshold = 18 tps
redstonesingle 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.46 ms
- mspt_target = 35 ms
- tps_avg = 20 tps
- tps_held_threshold = 18 tps
redstoneThe worst ticks are several times the mean. Average TPS stays fine while players feel the stutter.
- mspt_avg = 50.46 ms
- mspt_p99 = 106.38 ms
- spike_ratio = 2.11 ratio
- sample_count = 31 count
- periodic_test = 1
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 AIEntities5.72UnstableCritical
- Chunk LoadingExploration19.39UnstableUnstable
- Network (NBT)Network20.00UnstableUnstable
- HopperMechanics16.93UnstableHealthy
- Block PhysicsSingle-Core Stress19.23UnstableHealthy
- ExplosionMechanics19.94UnstableHealthy
- Ticking Tile EntitiesMechanics19.96StableHealthy
- Disk PerformanceMemory & Storage20.00StableHealthy
- RedstoneSingle-Core Stress20.00UnstableHealthy
- World SaveMechanics20.00StableHealthy
- Lighting UpdateExploration20.00StableHealthy
- Memory PerformanceMemory & Storage20.00StableHealthy
- Single-Core (tick-aligned)CPU20.00StableHealthy
- Chunk TickingExploration20.00UnstableHealthy
- Multi-Core CPUCPU20.00StableHealthy
- Bone Meal GrowthMechanics20.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 273.5 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
Lower the monster spawn limit
spawn-limits.monsters: 50Measured : mobAI.mspt.avg 273.5 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": "spigot",
"minecraft": "1.1.2",
"java": "25.0.2"
},
"recommendations": [
{
"id": "spigot.portee-activation-monstres",
"family": "spigot",
"measure": "mobAI.mspt.avg",
"value": 273.46774015277776,
"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": "bukkit.limite-monstres",
"family": "bukkit",
"measure": "mobAI.mspt.avg",
"value": 273.46774015277776,
"unit": "ms",
"threshold": 50,
"control_test": "mobAI",
"file": "bukkit.yml",
"setting": "spawn-limits.monsters",
"proposed_value": "50",
"current_value": null
}
]
}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 (5 arguments)
Values of system properties, agents and file paths are never shown: they appear as <redacted>.
-Xms128M -Xmx6302M -Dterminal.jline=false -Dterminal.ansi=true -Djline.terminal=<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.
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -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=1No 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.
Every measurement
Each test in full. Tests in trouble are open; the others fold to their summary line.
Single-Core Stress
RedstoneHealthy20.00 TPS50.5 ms42.6s
Single-core stress via intensive redstone circuit updates.
Percentiles and stability
Block PhysicsHealthy19.23 TPS46.2 ms20.9s
Single-core stress via falling-block physics.
Percentiles and stability
Exploration
Chunk LoadingUnstable19.39 TPS26.2 ms32.9s
Chunk generation and loading speed across dispersed zones.
Percentiles and stability
Chunk TickingHealthy20.00 TPS29.0 ms43.6s
Server performance when ticking many loaded chunks with random tick updates.
Percentiles and stability
Lighting UpdateHealthy20.00 TPS5.5 ms24.5s
Lighting recomputation throughput on block place / break.
Percentiles and stability
Entities
Mob AICritical5.72 TPS273.5 ms27.6s
Complex mob AI behaviours (villagers, iron golems, hostile mobs).
Percentiles and stability
Mechanics
HopperHealthy16.93 TPS5.7 ms33.0s
Intensive hopper chain item transfers.
Percentiles and stability
ExplosionHealthy19.94 TPS10.4 ms17.0s
Massive TNT explosions and block destruction.
Percentiles and stability
Ticking Tile EntitiesHealthy19.96 TPS4.2 ms36.0s
Many ticking tile entities (furnaces, hoppers, etc.).
Percentiles and stability
World SaveHealthy20.00 TPS3.6 ms4.7s
World save speed and TPS impact during save operations.
Percentiles and stability
Bone Meal GrowthHealthy20.00 TPS4.6 ms19.6s
Rapid crop and tree growth via bone meal.
Percentiles and stability
CPU
Single-Core (tick-aligned)Healthy20.00 TPS5.6 ms10.0s
Single-thread compute throughput measured on the main thread under the tick scheduler.
Percentiles and stability
Multi-Core CPUHealthy20.00 TPS3.7 ms18.9s
Parallel computation throughput across worker threads.
Percentiles and stability
Memory & Storage
Memory PerformanceHealthy20.00 TPS3.2 ms267.1s
RAM bandwidth and latency.
JVM measurements — do not reflect actual bare-metal performance.
Percentiles and stability
Disk PerformanceHealthy20.00 TPS3.8 ms30.0s
Sequential and random 4K read/write performance.
JVM measurements — do not reflect actual bare-metal performance.
Percentiles and stability
Network
Network (NBT)Unstable20.00 TPS28.1 ms20.0s
Serialisation throughput — proxy for the rate at which the server can ship world data to clients.
Percentiles and stability
›Machine and serverAMD EPYC 7543P 32-Core Processor · Spigot · 1.1.2
Score Breakdown
Detailed sub-category scores