Our Hetzner CX23 benchmark in short: the 2 vCPU, 4 GB CX23 we rented in Helsinki on 5 November 2026 had fast disks (53,050 random-read IOPS), zero CPU steal and enough RAM for n8n or the full Supabase stack. Its weak spot was the CPU. It reported an Intel Xeon Skylake and scored 913.87 sysbench events/s on one thread, the lowest of the five Hetzner plans we tested that evening.
Why it matters now: after the 2026 price changes the CX23 costs 5.49 euro net per month in the Hetzner Cloud API, still the cheapest 4 GB server Hetzner lists. Whether it is a bargain depends on which CPU you land on.
Most CX23 benchmarks online are single synthetic runs with no context. Below you get the CX23 numbers next to four sibling plans, plus what real apps did on it.
Tested in the Lab Hetzner CX23 (plus CX33, CX43, CAX11, CAX21 for context) · hel1 · Nov 2026
For the whole provider picture, see our Hetzner hub and the full Hetzner review.
The test server
- Plan: CX23, Helsinki (hel1), shared vCPU, x86
- CPU reported by lscpu: Intel Xeon Processor (Skylake, IBRS, no TSX), 2 vCPU
- RAM: 3,819 MiB total, no swap; 444 MiB used on a fresh boot
- Disk: 38G root filesystem (sold as 40 GB)
- OS: Ubuntu 24.04.4 LTS, kernel 6.8.0-138-generic
- Price: 5.49 euro net, 6.64 euro gross for our account, per month (API, 5 November 2026)
MiB is a mebibyte (1,048,576 bytes), about 5 % more than a megabyte. The operating system sees less than the advertised 4 GB because the kernel reserves part of it.
Shared vCPU plans can land on different CPU generations
Hetzner sells the CX line as "Cost-Optimized". Its product page says these plans use "older but reliable processor generations from Ampere, Intel, and AMD", labels CX "Intel/AMD", and recommends them for "workloads that can handle variable CPU performance". In practice that means the CX23 you create can be an Intel or an AMD machine, and you cannot choose.
Public runs show both. A CX23 on VPSBenchmarks from Falkenstein in April 2026 reports the same Skylake string as ours, with a Geekbench 6 single-core score of 710. A CX23 from Nuremberg in February 2026 reports AMD EPYC-Rome with 1,464. Our own CX33 and CX43, created minutes after the CX23, both got EPYC-Rome.
The practical advice: run lscpu | grep "Model name" right after you create a CX23. If it says Skylake and your workload is CPU-heavy, delete it and create another one, or choose the ARM CAX11.
CX23 benchmark results next to four other Hetzner plans
| Server | CPU 1 thread events/s | CPU all threads events/s | Memory MiB/s | Disk 4k read IOPS | Disk 4k write IOPS | Disk seq. read | Download | CPU steal | Price / mo |
|---|---|---|---|---|---|---|---|---|---|
| Hetzner CX232 vCPU · 4 GB · x86_64 | 914 | 1,823 | 4,098 | 53,050 | 47,996 | 2,965 MB/s | 285 Mbit/s | 0.0 % | 6.64 €incl. VAT |
| Hetzner CX334 vCPU · 8 GB · x86_64 | 1,621 | 6,453 | 4,974 | 41,644 | 35,013 | 1,936 MB/s | 781 Mbit/s | 0.0 % | 10.27 €incl. VAT |
| Hetzner CX438 vCPU · 15 GB · x86_64 | 3,470 | 26,697 | 4,968 | 45,005 | 42,104 | 2,338 MB/s | 835 Mbit/s | 0.0 % | 19.35 €incl. VAT |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | 3,248 | 6,550 | 4,171 | 48,554 | 42,051 | 2,370 MB/s | 567 Mbit/s | 0.0 % | 7.25 €incl. VAT |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | 3,307 | 13,210 | 4,264 | 53,796 | 46,019 | 2,490 MB/s | 381 Mbit/s | 0.0 % | 12.69 €incl. VAT |
Measured by AI Hosting Lab on 2026-11-05 · 5 servers · method · raw data
CPU
sysbench's CPU test counts prime-number calculations per second. The CX23 did 913.87 events/s on one thread and 1,823.05 with both threads, so the second vCPU almost doubled the result. The CX33 on EPYC-Rome did 1,620.94 on one thread and the ARM CAX11 did 3,248.26. ARM cores do unusually well on this particular test, so do not read the CAX11 figure as "3.5 times faster at everything"; the Ollama results below show a smaller gap. CPU steal, the time the host gave your vCPU to someone else, was 0.0 % over 30 seconds.
Memory
Single-thread memory bandwidth was 4,097.89 MiB/s, close to the CAX11's 4,170.58 and below the AMD plans (4,973.99 on the CX33).
Disk
IOPS are input/output operations per second. The CX23 did 53,050 random 4k reads and 47,996 random 4k writes per second, both near the top of the group. Sequential 1 MB reads hit 2,965 MB/s, the highest we measured. Sequential writes were the lowest at 1,283 MB/s. For Postgres under n8n, the random numbers matter more, and they are excellent.
Network
A download from Hetzner's Helsinki speed-test server ran at 6,332 Mbit/s, from the CacheFly CDN at 3,854 Mbit/s, and from Hetzner's Falkenstein server at only 285 Mbit/s, the slowest cross-datacenter result of the five plans. Ping to 1.1.1.1 was 1.429 ms. If you back up to Germany from Helsinki, plan for the slower figure.
Real apps on the CX23
Docker and Supabase
Docker installed in 15.1 s. The official Supabase docker compose stack took 110.7 s to pull, the slowest of the five, and 31.5 s to start. After 90 seconds idle, all 11 containers were up with 0 unhealthy; the containers used 1,399 MiB and the whole system 1,594 MiB. That leaves room, but not much: Supabase's own docs give 4 GB RAM and 2 cores as the minimum and recommend 8 GB and 4 cores.
| Server | Containers | RAM (containers) | RAM used (system) | Fits? | Image pull | Disk (images) |
|---|---|---|---|---|---|---|
| Hetzner CX232 vCPU · 4 GB · x86_64 | 11 | 1,399 MiB | 1,594 MiB | yes | 111 s | 9.563GB |
| Hetzner CX334 vCPU · 8 GB · x86_64 | 11 | 1,316 MiB | 1,732 MiB | yes | 50 s | 9.563GB |
| Hetzner CX438 vCPU · 15 GB · x86_64 | 11 | 1,101 MiB | 1,870 MiB | yes | 29 s | 9.563GB |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | 11 | 1,562 MiB | 1,564 MiB | yes | 99 s | 10.14GB |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | 11 | 1,318 MiB | 1,712 MiB | yes | 52 s | 10.14GB |
Measured by AI Hosting Lab on 2026-11-05 · 5 servers · method · raw data
Ollama
Tokens/s is how many word pieces a model writes per second. On the CX23, Llama 3.2 1B generated 10.3 tokens/s and read the prompt at 454 tokens/s, using 2,001 MiB of system RAM while loaded. Llama 3.2 3B generated 5.8 tokens/s with 3,002 MiB used and took 8.8 s to load. Llama 3.1 8B did not run: it was OOM-killed after about 50 seconds. Ollama's fit check reported it would leave 1,698 MiB free, then the kernel's out-of-memory killer stopped llama-server. The server has no swap. On the 4 GB CAX11 the same model failed with insufficient memory.
| Server | Model | Generation tokens/s | Prompt tokens/s | Load time | RAM used (system) | Note |
|---|---|---|---|---|---|---|
| Hetzner CX232 vCPU · 4 GB · x86_64 | Llama 3.2 1B | 10.3 | 454.0 | 3.5 s | 2,001 MiB | |
| Hetzner CX232 vCPU · 4 GB · x86_64 | Llama 3.2 3B | 5.8 | 325.2 | 8.8 s | 3,002 MiB | |
| Hetzner CX232 vCPU · 4 GB · x86_64 | Llama 3.1 8B | did not run | – | – | – | OOM-killed after ~50 s: Ollama fit check reported it would leave 1698 MiB free, |
| Hetzner CX334 vCPU · 8 GB · x86_64 | Llama 3.2 1B | 23.2 | 1,322.8 | 2.0 s | 2,205 MiB | |
| Hetzner CX334 vCPU · 8 GB · x86_64 | Llama 3.2 3B | 13.5 | 776.5 | 3.7 s | 3,068 MiB | |
| Hetzner CX334 vCPU · 8 GB · x86_64 | Llama 3.1 8B | 6.3 | 258.6 | 10.0 s | 5,941 MiB | |
| Hetzner CX438 vCPU · 15 GB · x86_64 | Llama 3.2 1B | 37.5 | 1,910.9 | 1.7 s | 2,293 MiB | |
| Hetzner CX438 vCPU · 15 GB · x86_64 | Llama 3.2 3B | 21.2 | 1,161.3 | 3.7 s | 3,196 MiB | |
| Hetzner CX438 vCPU · 15 GB · x86_64 | Llama 3.1 8B | 9.7 | 447.4 | 7.9 s | 6,023 MiB | |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | Llama 3.2 1B | 15.0 | 835.5 | 4.8 s | 2,203 MiB | |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | Llama 3.2 3B | 6.5 | 376.4 | 6.0 s | 3,214 MiB | |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | Llama 3.1 8B | did not run | – | – | – | llama-server process has terminated: exit status 1: ggml_aligned_malloc: insuffi |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | Llama 3.2 1B | 26.8 | 1,427.1 | 3.2 s | 2,315 MiB | |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | Llama 3.2 3B | 12.2 | 664.1 | 5.2 s | 3,282 MiB | |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | Llama 3.1 8B | 5.7 | 226.5 | 12.3 s | 5,796 MiB |
Measured by AI Hosting Lab on 2026-11-05 · 5 servers · method · raw data
n8n
Our production n8n runs on a separate CX23 with Ubuntu 26.04. n8n 2.46.6 plus Postgres 16 went from Docker install to a healthy instance in 127 s. At idle n8n used 379.7 MiB, Postgres 69.6 MiB, and the whole server 1,036 MiB, with n8n at 3.16 % CPU. The disk had 4.7G of 38G used after install.
| n8n 2.46.6 on Hetzner CX23 | Measured |
|---|---|
| Docker install | 22 s |
| Image pull + first start to healthy | 105 s |
| n8n RAM right after start | 785.3 MiB |
| n8n RAM idle (after ~60 s) | 379.7 MiB |
| PostgreSQL 16 RAM idle | 69.6 MiB |
| Whole server RAM used, idle | 1036 MiB of 3,814 |
| n8n image size | 1.94GB |
| Disk used after install | 4.7G of 38G |
Measured by AI Hosting Lab on 2026-11-05 · docker compose: n8n + postgres:16, docker.io from Ubuntu repo, task runners on · method
On the test CX23 we also ran our n8n load test: a Webhook, Code node and response workflow hit by ApacheBench at 1, 10, 25 and 50 concurrent requests. An execution is one full run of that workflow; p95 is the response time 95 % of requests beat.
| Server | Concurrent requests | Executions/s | Median | p95 | Failed | n8n peak RAM |
|---|---|---|---|---|---|---|
| Hetzner CX232 vCPU · 4 GB · x86_64 | 1 | 10.1 | 104 ms | 162 ms | 0 | 520 MiB |
| Hetzner CX232 vCPU · 4 GB · x86_64 | 10 | 14.8 | 697 ms | 893 ms | 0 | 660 MiB |
| Hetzner CX232 vCPU · 4 GB · x86_64 | 25 | 15.0 | 1,651 ms | 1,936 ms | 0 | 825 MiB |
| Hetzner CX232 vCPU · 4 GB · x86_64 | 50 | 14.2 | 3,445 ms | 3,954 ms | 0 | 1,003 MiB |
| Hetzner CX334 vCPU · 8 GB · x86_64 | 1 | 13.5 | 72 ms | 133 ms | 0 | 543 MiB |
| Hetzner CX334 vCPU · 8 GB · x86_64 | 10 | 31.9 | 311 ms | 438 ms | 0 | 574 MiB |
| Hetzner CX334 vCPU · 8 GB · x86_64 | 25 | 29.5 | 841 ms | 986 ms | 0 | 803 MiB |
| Hetzner CX334 vCPU · 8 GB · x86_64 | 50 | 30.1 | 1,647 ms | 1,846 ms | 0 | 1,050 MiB |
| Hetzner CX438 vCPU · 15 GB · x86_64 | 1 | 14.6 | 78 ms | 123 ms | 0 | 546 MiB |
| Hetzner CX438 vCPU · 15 GB · x86_64 | 10 | 36.1 | 280 ms | 341 ms | 0 | 544 MiB |
| Hetzner CX438 vCPU · 15 GB · x86_64 | 25 | 35.0 | 714 ms | 800 ms | 0 | 694 MiB |
| Hetzner CX438 vCPU · 15 GB · x86_64 | 50 | 32.4 | 1,539 ms | 1,682 ms | 0 | 1,016 MiB |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | 1 | 10.3 | 113 ms | 156 ms | 0 | 585 MiB |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | 10 | 13.9 | 755 ms | 934 ms | 0 | 640 MiB |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | 25 | 12.9 | 1,909 ms | 2,279 ms | 0 | 729 MiB |
| Hetzner CAX112 vCPU · 4 GB · aarch64 | 50 | 13.2 | 3,786 ms | 4,114 ms | 0 | 1,038 MiB |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | 1 | 12.0 | 107 ms | 128 ms | 0 | 539 MiB |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | 10 | 25.4 | 402 ms | 528 ms | 0 | 579 MiB |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | 25 | 25.8 | 965 ms | 1,106 ms | 0 | 824 MiB |
| Hetzner CAX214 vCPU · 8 GB · aarch64 | 50 | 24.5 | 2,019 ms | 2,197 ms | 0 | 859 MiB |
Measured by AI Hosting Lab on 2026-11-05 · 5 servers · method · raw data
The CX23 did 10.11 executions/s with one request at a time (104 ms median), rose to 15.04 at 25 concurrent, and held 14.25 at 50, with 0 failed requests in every run. At 50 concurrent the median response was 3,445 ms and p95 3,954 ms: it queues, it does not crash. n8n peaked at 1,003.0 MiB of RAM. The CX33 handled roughly twice the load (31.93 executions/s at 10 concurrent), and the ARM CAX11 slightly less than the CX23 (13.9 at best), despite its much higher sysbench score.
Cost per result
Dividing our measured numbers by the API net prices of 5 November 2026:
| Plan | Net €/month | Llama 3.2 3B tokens/s | Tokens/s per euro |
|---|---|---|---|
| CX23 | 5.49 | 5.8 | 1.06 |
| CAX11 | 5.99 | 6.5 | 1.09 |
| CX33 | 8.49 | 13.5 | 1.59 |
| CAX21 | 10.49 | 12.2 | 1.16 |
| CX43 | 15.99 | 21.2 | 1.33 |
For local models the CX23 is the worst value of the five and the CX33 the best. For n8n, the CX23 gives 2.74 peak executions/s per euro (15.04 / 5.49), against 3.76 on the CX33 (31.93 / 8.49) and 2.32 on the CAX11 (13.9 / 5.99). If you expect bursts of traffic, the CX33 is better value; for a light workflow load the CX23 is the cheapest server that does the job. All prices exclude the 0.50 euro net primary IPv4.
Run the same benchmark yourself
These lines come straight from our lab/bench.sh. Run them as root on a fresh Ubuntu server.
apt-get -y -qq install sysbench fio jq apache2-utils git
sysbench cpu --threads=1 --time=20 run
sysbench cpu --threads=$(nproc) --time=20 run
vmstat 1 31
sysbench memory --memory-total-size=10G --threads=1 run
fio --name=t --filename=/root/fio.tmp --size=2G --direct=1 --ioengine=libaio --rw=randread --bs=4k --iodepth=32 \
--runtime=30 --time_based --group_reporting --output-format=json
curl -s -o /dev/null --max-time 40 -w "%{speed_download}" https://fsn1-speed.hetzner.com/1GB.bin
curl prints bytes per second; multiply by 8 and divide by 1,000,000 for Mbit/s. If you harden SSH before benchmarking on Ubuntu 24.04 or newer, note that sshd runs via ssh.socket: systemctl reload ssh fails with "ssh.service is not active", but new connections already use the new config. Our steps are in secure an Ubuntu VPS.
Verdict on the CX23
Buy the CX23 for n8n, bots and small web apps. It handled up to 15.04 webhook executions/s without a failure, more than the CAX11, and its disk is excellent. Skip it for local LLMs, or check the CPU first: a Skylake CX23 was the slowest CPU in our test. If you want the same 4 GB for 0.50 euro more with a faster CPU on our numbers, compare it with the CAX11 in Hetzner CX vs CAX.
Next step: see how the CX23 fits into the whole lineup in our Hetzner review.
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
How fast is the Hetzner CX23 CPU?
It depends on the host. Ours reported an Intel Xeon (Skylake) and did 913.87 sysbench events/s on one thread and 1,823.05 on both threads. A CX33 on AMD EPYC-Rome did 1,620.94 on one thread in the same test.
Can a Hetzner CX23 run n8n?
Yes. Our production n8n 2.46.6 with Postgres 16 runs on a CX23 and the whole server used 1,036 MiB of RAM at idle, out of 3,819 MiB available.
Can a CX23 run a local LLM with Ollama?
Small ones. Llama 3.2 1B generated 10.3 tokens/s and Llama 3.2 3B 5.8 tokens/s on our CX23. Llama 3.1 8B was OOM-killed on our CX23, which has no swap.
How much does a Hetzner CX23 cost?
On 5 November 2026 the Hetzner Cloud API listed it at 5.49 euro net (6.64 euro gross for our account) per month, plus 0.50 euro net for a primary IPv4 address.
Sources
- Hetzner, Cost-Optimized cloud servers (product page, opened 2026-11-05)
- Hetzner Docs, Primary IPs overview (2026)
- VPSBenchmarks, Hetzner CX23 YABS run, Falkenstein, Intel Skylake (April 2026)
- VPSBenchmarks, Hetzner CX23 YABS run, Nuremberg, AMD EPYC-Rome (February 2026)
- Better Stack, Hetzner Cloud Review 2026 (2026)
- Supabase Docs, Self-Hosting with Docker (2026)



