How we test VPS servers: we rent each server ourselves, run one script on a fresh Ubuntu install, and publish what it measured, including errors. The script, bench.sh, covers CPU, memory, disk, network, CPU steal, Docker, Supabase and Ollama. A second script, n8n_load.sh, load-tests a real n8n workflow. A full bench.sh run took about 10 minutes on the Hetzner CX43 and about 15 on the CX23.

This page lists every setting, so you can judge our numbers and repeat them. It belongs to our VPS benchmarks; the rules for writing about results are in the editorial policy.

Tested in the Lab Hetzner CX23, CX33, CX43, CAX11, CAX21 · Nov 2026

What bench.sh measures

It runs as root on a new server. First it enables ufw with only SSH open, then records the OS, kernel, CPU model, vCPU count (virtual CPU cores the provider assigns) and RAM used before anything is installed.

TestTool and exact settingWhat we record
CPU, one threadsysbench cpu --threads=1 --time=20events per second
CPU, all threadssysbench cpu --threads=$(nproc) --time=20events per second
CPU stealvmstat 1 31, average of 30 one-second samples% of time the hypervisor gave our vCPU to someone else
Memorysysbench memory --memory-total-size=10G --threads=1MiB/s
Disk, randomfio 4k blocks, iodepth 32, random read and random writeIOPS (input/output operations per second), MB/s
Disk, sequentialfio 1M blocks, iodepth 8, read and writeMB/s
Downloadcurl, 40 s cap: Hetzner hel1 and fsn1 1GB files, CacheFly 100 MBMbit/s
Latencyping -c 10 to 1.1.1.1 and 8.8.8.8average ms
Dockerapt-get install docker.io docker-compose-v2install seconds, RAM after
Supabaseofficial docker compose from GitHub, defaultspull and start time, containers, RAM after 90 s idle, image size
Ollamanative install, CPU only, Llama 3.2 1B, 3.2 3B, 3.1 8Bgeneration and prompt tokens/s, load time, RAM, or the error

All four fio runs use a 2G test file, --direct=1 (bypassing the page cache, so we measure the disk, not RAM), the libaio engine and 30 s time-based runs.

Ollama details. Every model gets the same prompt about what a VPS is, with num_predict 256 (a 256-token answer), temperature 0 and seed 42, so runs are as repeatable as possible. We send the request twice. Run 1 gives load time and RAM with the model loaded. Run 2, with the model warm, gives tokens/s, computed from Ollama's own eval_count and eval_duration. A token is the unit a model reads and writes, usually a word or part of a word. Each request may take up to 900 s; the model is then unloaded with keep_alive 0. If a model does not run, we publish the error instead of a number.

Here is what the system tests produced on our five Hetzner servers:

ServerCPU 1 thread
events/s
CPU all threads
events/s
Memory
MiB/s
Disk 4k read
IOPS
Disk 4k write
IOPS
Disk seq. readDownloadCPU stealPrice / mo
Hetzner CX232 vCPU · 4 GB · x86_649141,8234,09853,05047,9962,965 MB/s285 Mbit/s0.0 %6.64 €incl. VAT
Hetzner CX334 vCPU · 8 GB · x86_641,6216,4534,97441,64435,0131,936 MB/s781 Mbit/s0.0 %10.27 €incl. VAT
Hetzner CX438 vCPU · 15 GB · x86_643,47026,6974,96845,00542,1042,338 MB/s835 Mbit/s0.0 %19.35 €incl. VAT
Hetzner CAX112 vCPU · 4 GB · aarch643,2486,5504,17148,55442,0512,370 MB/s567 Mbit/s0.0 %7.25 €incl. VAT
Hetzner CAX214 vCPU · 8 GB · aarch643,30713,2104,26453,79646,0192,490 MB/s381 Mbit/s0.0 %12.69 €incl. VAT

Measured by AI Hosting Lab on 2026-11-05 · 5 servers · method · raw data

What n8n_load.sh measures

It installs n8n 2.46.6 with Postgres 16 using the same images as our production server, creates an owner account and API key through n8n's REST API, and activates one workflow: Webhook → Code node (running in a task runner) → response. After a warm-up of 200 requests at 5 concurrent, ApacheBench (ab) sends POST requests at 1, 10, 25 and 50 concurrent connections: 300 requests at concurrency 1, and 40 per connection above that. We record executions per second, median and 95th-percentile latency (95% of requests were faster), failed and non-2xx responses, and n8n's peak RAM sampled with docker stats.

The test talks to 127.0.0.1 without TLS, so it measures n8n and Postgres, not your network or the proxy. Results are published once all runs are complete:

ServerConcurrent requestsExecutions/sMedianp95Failedn8n peak RAM
Hetzner CX232 vCPU · 4 GB · x86_64110.1104 ms162 ms0520 MiB
Hetzner CX232 vCPU · 4 GB · x86_641014.8697 ms893 ms0660 MiB
Hetzner CX232 vCPU · 4 GB · x86_642515.01,651 ms1,936 ms0825 MiB
Hetzner CX232 vCPU · 4 GB · x86_645014.23,445 ms3,954 ms01,003 MiB
Hetzner CX334 vCPU · 8 GB · x86_64113.572 ms133 ms0543 MiB
Hetzner CX334 vCPU · 8 GB · x86_641031.9311 ms438 ms0574 MiB
Hetzner CX334 vCPU · 8 GB · x86_642529.5841 ms986 ms0803 MiB
Hetzner CX334 vCPU · 8 GB · x86_645030.11,647 ms1,846 ms01,050 MiB
Hetzner CX438 vCPU · 15 GB · x86_64114.678 ms123 ms0546 MiB
Hetzner CX438 vCPU · 15 GB · x86_641036.1280 ms341 ms0544 MiB
Hetzner CX438 vCPU · 15 GB · x86_642535.0714 ms800 ms0694 MiB
Hetzner CX438 vCPU · 15 GB · x86_645032.41,539 ms1,682 ms01,016 MiB
Hetzner CAX112 vCPU · 4 GB · aarch64110.3113 ms156 ms0585 MiB
Hetzner CAX112 vCPU · 4 GB · aarch641013.9755 ms934 ms0640 MiB
Hetzner CAX112 vCPU · 4 GB · aarch642512.91,909 ms2,279 ms0729 MiB
Hetzner CAX112 vCPU · 4 GB · aarch645013.23,786 ms4,114 ms01,038 MiB
Hetzner CAX214 vCPU · 8 GB · aarch64112.0107 ms128 ms0539 MiB
Hetzner CAX214 vCPU · 8 GB · aarch641025.4402 ms528 ms0579 MiB
Hetzner CAX214 vCPU · 8 GB · aarch642525.8965 ms1,106 ms0824 MiB
Hetzner CAX214 vCPU · 8 GB · aarch645024.52,019 ms2,197 ms0859 MiB

Measured by AI Hosting Lab on 2026-11-05 · 5 servers · method · raw data

What we pay for

We rent every server on our own Hetzner account at the normal hourly rate, for example 0.0106 € per hour gross for a CX23, from the Hetzner Cloud API price list checked on 2026-11-05. Our production n8n server is a CX23 at 6.64 € per month. We never buy through our own affiliate links, and no provider pays for or reviews a test. See the affiliate disclosure for how links are handled.

Limits you should know

  • One run per server. We have not repeated runs across days yet, so a number is one sample, not an average.
  • Shared vCPUs vary. All five servers are shared-CPU plans. Steal was 0.0% during our 30 s window on all of them, but a neighbour can change that an hour later.
  • One provider, one location. Hetzner, Helsinki (hel1) only, so far. Other providers are marked "not yet tested" until we run them.
  • Two Ubuntu versions. Test servers ran Ubuntu 24.04; our production n8n server runs 26.04. We label which is which.
  • CPU only, idle Supabase. No GPU tests yet, and Supabase is measured idle, not under load.

How results are published

Each run writes key=value lines and raw tool output (sysbench text, fio JSON, Ollama JSON). We store one JSON file per server and test under lab/results/, named by date, provider, plan and location, and combine them into one lab.json. Every table and chart on this site is rendered from that file at build time, so a number in an article cannot drift from the measurement. When we rerun a server, the page shows the new date.

Next step: see the results side by side in our VPS benchmarks.

Hetzner prices on this page include 21% VAT, as charged to our Czech (EU consumer) account by the Hetzner API on 2026-11-05. Without VAT (businesses, most buyers outside the EU): CX23 5.49 €, CX33 8.49 €, CX43 15.99 €, CAX11 5.99 €, CAX21 10.49 € per month.

FAQ

Do you buy the servers you test?

Yes. We rent every server on our own account at the normal hourly price and never through our own affiliate links.

How many times do you run each benchmark?

Once per server so far. The Ollama test sends the same prompt twice and reports the second, warm run. We say so wherever a number is shown.

Which providers have you tested?

Hetzner Cloud only so far: CX23, CX33, CX43, CAX11 and CAX21 in Helsinki, plus our production CX23. Other providers are scheduled and are marked as not yet tested.

Can I run your benchmark myself?

Yes. bench.sh runs as root on a fresh Ubuntu server and writes key=value lines plus raw JSON files, so you can compare your server with ours.

Sources

  1. sysbench (GitHub)
  2. fio documentation
  3. Ollama API documentation (GitHub)
  4. Apache HTTP Server, ab benchmarking tool