Guide
How to benchmark your own game server fairly
To benchmark a game server fairly, check your host's terms before you run anything, keep the workload, world and software fixed between runs, repeat every test, and write down versions and dates. Use sysbench, fio, iperf3 and MTR only where you have shell access. On a managed panel, rely on spark and the game's own metrics. This page covers servers you own or rent, and it reports no results because GameServerBench has measured nothing.
Is it allowed? Check your host's terms first
Read your host's terms before any test, because silence in a terms document is not permission and load or bot tools may be prohibited. Hosts decide what counts as abuse, and several reserve that call for themselves. GameServerBench has not contacted any host about testing, and none of the documents re-read for this guide grants a general right to benchmark.
What the terms re-read for this guide on 8 November 2026 say:
- Construct Game Services (fair use policy, last updated 22 Dec 2025) lists "Load testing, stress testing, or benchmarking without prior written approval" as prohibited. It also lists "Approved load testing or benchmarking" as an exception and says "To request an exception, contact support with details of your intended usage." This is the only document read for this guide with an approval route.
- Citadel Servers (fair use policy, version date 05-01-2015) prohibits hosting speed-test servers and "any activities aimed at testing or benchmarking network speed and performance". It also prohibits "server automation tools or bots that generate excessive network traffic or server load".
- BisectHosting (acceptable use policy, last updated 29 Apr 2026) says you may not use the services "in any manner that could disable, overburden, or impair any of our servers, whether intentional or otherwise". It lists "unauthorized bots" among resource abuse, and for VPS and dedicated servers bans "port scanners, botnets, brute-force scripts, or penetration testing tools without permission".
- Aternos (free service, terms undated) lists "using fake players, e.g. bots" as a way of circumventing its stop routine for empty servers, and prohibits "Excessive use of our provided resources".
- Indifferent Broccoli (terms last updated 28 Oct 2026) says servers may not "run software that is not part of hosting your game". A load tool could arguably fall under that.
- Apex Hosting and DatHost have no benchmarking or bot clause in the text searched for this guide. That is not permission. Apex's terms bar activity that "affects the ability of other people or systems" to use its services, and DatHost's say "Any abuse of the Service will lead to termination of your account", with DatHost deciding what abuse is.
Practical steps: ask support in writing, say which tool, how long, how many connections and from where, and keep the reply. Never aim load at a server you do not own or rent. Do not rely on a refund window to cover a test that breaks a rule: Citadel's policy, for one, allows suspending or terminating services "without any form of refund for paid services" in cases of severe or persistent abuse. The bot tool SoulFire says the same in its README: use it "only on servers that you own or have permission to test" and confirm your hosting provider "allows automated bot testing". The wider picture is on independence and host terms.
What can I run if I have shell access?
On a VPS, dedicated server or home machine you can run four standard tools, after checking your host's terms as above, each measuring one narrow thing. None measures game performance, so pair them with in-game metrics.
| Tool | What it measures | Notes from its documentation |
|---|---|---|
sysbench cpu | CPU speed on a fixed arithmetic task | The README calls cpu "a simple CPU benchmark" and lists --threads (default 1), --time (default 10 seconds) and --warmup-time. Run it with one thread to reflect the game's main thread. Paper's docs say the tick loop "uses a single thread" (Paper troubleshooting). Example: sysbench cpu --threads=1 --time=30 run |
| fio | Disk throughput, IOPS and latency under a defined I/O pattern | The fio docs say direct selects non-buffered I/O (default false), and ioengine and iodepth set how I/O is issued. Results depend heavily on those settings, so record them. Linux example: fio --name=randwrite --ioengine=libaio --rw=randwrite --bs=4k --iodepth=4 --direct=1 --size=1g --runtime=60 --time_based |
| iperf3 | TCP or UDP throughput between two machines | Needs a server end you control: iperf3 -s on one side, iperf3 -c <server> -t 30 on the other. The iperf3 docs list -R to reverse direction, -u for UDP, and -J for JSON output. The default UDP target rate is 1 Mbit/s, so set -b. |
| MTR | Hop-by-hop path and loss between two points | The README says mtr "combines the functionality of the 'traceroute' and 'ping' programs". It warns that "apparent loss at an intermediate hop does not always mean that forwarded traffic is being lost". Report mode: mtr -rw -c 100 <host> (manual). Run it from where your players are. |
Cautions that apply to all four. Run fio against a scratch file with a size you can afford, never your world directory. Stop or note any running game process, since it shares the CPU and disk. Run iperf3 only between machines you control. The mtr manual warns each instance "generates a significant amount of network traffic". These tools also count as load, so the terms check above applies.
What if I only have a managed panel?
Use spark and the game's own metrics, because most panels give no shell. On Minecraft, /spark tps prints TPS and MSPT, /spark health reports CPU, memory and disk, and /spark profiler start --timeout 600 records ten minutes (spark commands). Paper's own /tps and /mspt still work but are superseded by spark. MSPT and TPS explained covers reading the output. For Palworld, Pocketpair's REST API lists a server metrics endpoint with serverfps, serverframetime, player counts and uptime (metrics docs). Check what your panel exposes before assuming a tool exists.
Why do idle bots misrepresent modded load?
Bots that log in and stand around do not do what players do, and on a modded server the tick time goes into what players do. Space-Node, a hosting seller, says that most bot tools that log in fake players "do not build farms, run machines or open mod menus, and in a modded pack that is where the tick time goes". Its advice is that a one-hour session with your own group "is a better load than a hundred idle bots" (Space-Node, updated 28 Sep 2026). That is a vendor's reasoning, not a measurement, and the logic is simple enough: a bot runs scripted behaviour, and this site found no published calibration of bots against real players.
Bots still have a role as a repeatable, narrow load. SoulFire describes itself as an "Advanced Minecraft Bot Tool" with configurable bot counts and join delays, and its README lists A* pathfinding that includes mining and placing blocks, so tools differ in what they can do. This guide found no published calibration of any bot tool against real modded play. Godlike, a hosting seller that is a party in its own host comparisons, describes a test with four bots moving away from spawn to force chunk generation, and notes that world seeds were not standardised between hosts (Godlike's ScalaCube article, undated in the text read for this guide). It is cited as a method example only and not for its results. Treat bots as testing one thing, such as chunk generation or join and leave cost, and not as a stand-in for a full player load. GameServerBench plans published load profiles on its load profiles page, but none exist yet.
How many runs, and what should I record?
Repeat every test at least three times and compare the spread. Three is this site's suggestion, not a standard. A single run mixes your change with other tenants, time of day and warm-up effects. Report a median and a range, and run at more than one time of day if the server is on shared hardware.
Record, for every run:
- Date, time and time zone, plus the host, plan name and region.
- Game version, mod or modpack version, loader, Java version and JVM flags.
- Tool versions (
sysbench --version,fio --version,iperf3 --version) and the full command line. - World copy used, player count and what players did. Restore the same world copy before each run, as Space-Node's method also advises.
- The raw output, saved as a file (
iperf3 -Jgives JSON), not just the number you read from it.
Change one thing at a time, for example a flag set from Java flags for modded servers, and compare like with like: same plan size, same tool settings, same world. A score from one tool says nothing about another, and a synthetic number is no substitute for tick times under your real players. For one pack worked through, see ATM10 server lag and high MSPT.
Next step: send the support request first, then pick one repeatable activity and capture your baseline in spark. The guides hub lists the related game-specific pages.
Sources
- Fair Use Policy - Construct Game Services (last updated 22 Dec 2025)
- Fair Use Policy - Citadel Servers (version date 05-01-2015)
- Acceptable Use Policy - BisectHosting (last updated 29 Apr 2026)
- Terms of service - Aternos
- Terms of Service - Indifferent Broccoli (last updated 28 Oct 2026)
- Terms of Service - Apex Hosting
- Terms of Service - DatHost
- sysbench README
- fio documentation
- Invoking iperf3 - iperf3 3.22 documentation
- mtr README
- mtr(8) manual page - Arch Linux manual pages
- spark command usage - spark docs
- Basic troubleshooting - PaperMC Docs
- Server metrics - Palworld Server Guide (Pocketpair)
- SoulFire README
- The Quest for 20 TPS: How to Load Test a Modded Minecraft Server - Space-Node (hosting seller)
- Godlike vs ScalaCube: Minecraft 8GB Server Performance Benchmark - Godlike (hosting seller)