# Hetzner CX23

Falkenstein DC Park 1

Benchmark complete

Finished Oct 26, 2026

Geekbench 7 single-core

653

Faster than 8% of 2 vCPU plans

Geekbench 7 multi-core

1,193

Faster than 5% of 2 vCPU plans

Disk 4K IOPS

38,471

fio random read and write, 50/50

Monthly price at test time

$6.49

184 multi-core points per dollar

Same price today

## Server

[Hetzner](https://rackcensus.com/vps-providers/hetzner-benchmarks)[CX23](https://rackcensus.com/plans/yj8on8-hetzner-cx23-benchmarks?location=fsn1)

-

Provider

Hetzner

-

Plan

CX23

-

Location

Falkenstein DC Park 1

-

vCPU

2

-

RAM

4 GB

-

Storage

40 GB NVMe

-

Network

Unknown

-

OS image

ubuntu-24.04

-

Trigger

Scheduled

-

Queued at

Oct 24, 2026, 08:06:00 UTC

[Visit Hetzner](https://rackcensus.com/go/hetzner)

## CPU

| Version | Single-core | Multi-core | Result link |
| --- | --- | --- | --- |
| Geekbench 7 | 653 | 1,193 | [Geekbench Browser](https://browser.geekbench.com/v7/cpu/728544) |

Scores from different Geekbench versions aren't comparable with each other. Charts only use Geekbench 7.

### Geekbench 7 workloads

| Workload | Single-core | Multi-core |
| --- | --- | --- |
| File Compression | 69698th of 110 | 1,11959th of 60 |
| Navigation | 83493rd of 110 | Single-core only |
| HTML5 Browser | 73090th of 110 | Single-core only |
| PDF Viewer | 78594th of 110 | Single-core only |
| Photo Library | 56696th of 110 | 1,14657th of 60 |
| Clang | 69293rd of 110 | 1,39754th of 60 |
| Text Processing | 66695th of 110 | 1,23055th of 60 |
| Asset Compression | 537102nd of 110 | 1,09260th of 60 |
| HDR | 63497th of 110 | 1,03059th of 60 |
| Photo Editor | 62095th of 110 | 1,46553rd of 60 |
| Ray Tracer | 604100th of 110 | 1,13260th of 60 |
| Structure from Motion | 696100th of 110 | Single-core only |
| Game Physics | 56198th of 110 | Single-core only |
| Video Encoder | 60497th of 110 | Single-core only |
| Audio Encoder | 65499th of 110 | Single-core only |
| Video Player | 63495th of 110 | Single-core only |

Rank among the 110 runs with Geekbench 7 workload scores. Bars are relative to the best run. Geekbench doesn't run every workload multi-core, so some rows only have a single-core score.

## Disk

| Block size | Read | Write | Total |
| --- | --- | --- | --- |
| 4K | 75 MB/s (19,210 IOPS) | 75.2 MB/s (19,261 IOPS) | 150.3 MB/s (38,471 IOPS) |
| 64K | 706.1 MB/s (11,296 IOPS) | 709.8 MB/s (11,356 IOPS) | 1.38 GB/s (22,652 IOPS) |
| 512K | 1.33 GB/s (2,716 IOPS) | 1.4 GB/s (2,860 IOPS) | 2.72 GB/s (5,576 IOPS) |
| 1M | 1.36 GB/s (1,396 IOPS) | 1.45 GB/s (1,489 IOPS) | 2.82 GB/s (2,885 IOPS) |

fio random read and write, 50/50, run by YABS against the boot disk.

## Network

### IPv4 transfer speed

Loading...

| Target | Protocol | Send | Receive |
| --- | --- | --- | --- |
| Eranium, Amsterdam, NL (100G) | IPv4 | 3.5 Gbps | 4.14 Gbps |
| Leaseweb, NYC, NY, US (10G) | IPv4 | 2.45 Gbps | 2.57 Gbps |
| Leaseweb, Singapore, SG (10G) | IPv4 | 1.35 Gbps | 1.39 Gbps |

Public iperf3 servers vary in capacity and availability. Compare a target only with itself over time.

## Application workloads

### PostgreSQL transactions
Measured

Durable transfers and indexed account lookups against a fixed relational dataset.

PostgreSQL transactions measurements| Repeat | Offered / s | transactions/s | p95 / p99 ms | Errors / dropped | Result |
| --- | --- | --- | --- | --- | --- |
| 1 | 100 | 100 | 8.48 / 9.57 | 0 / 0 | Met workload limits |
| 1 | 500 | 498.79 | 7.41 / 10.56 | 0 / 218 | Met workload limits |
| 1 | 1000 | 997.68 | 7.49 / 22.91 | 0 / 416 | Met workload limits |
| 1 | 3000 | 2975.5 | 43.3 / 118.83 | 0 / 4401 | latency limit exceeded |
| 2 | 100 | 100 | 8.29 / 9.47 | 0 / 0 | Met workload limits |
| 2 | 500 | 498.77 | 7.33 / 9.68 | 0 / 220 | Met workload limits |
| 2 | 1000 | 992.67 | 7 / 10.68 | 0 / 1319 | Met workload limits |
| 2 | 3000 | 2978.87 | 16.04 / 71.14 | 0 / 3793 | Met workload limits |

p95 ≤ 50 ms · p99 ≤ 100 ms · errors ≤ 1.0%

### PostgreSQL large dataset
Failed

The same transaction mix against ten million accounts; the dataset never shrinks to fit a plan.

RuntimeError: RuntimeError: TimeoutError:

p95 ≤ 100 ms · p99 ≤ 250 ms · errors ≤ 1.0%

### Redis cache
Measured

A mixed cache workload with 1 KiB values, expiration, misses and eviction.

Redis cache measurements| Repeat | Offered / s | operations/s | p95 / p99 ms | Errors / dropped | Result |
| --- | --- | --- | --- | --- | --- |
| 1 | 1000 | 1000 | 2.02 / 2.65 | 0 / 0 | Met workload limits |
| 1 | 5000 | 4999.98 | 1.87 / 2.33 | 0 / 0 | Met workload limits |
| 1 | 10000 | 9995.4 | 1.52 / 2.79 | 0 / 822 | Met workload limits |
| 1 | 25000 | 23917.87 | 12.16 / 15.54 | 0 / 194671 | latency limit exceeded |
| 2 | 1000 | 1000 | 1.9 / 2.17 | 0 / 0 | Met workload limits |
| 2 | 5000 | 4999.97 | 1.9 / 2.3 | 0 / 0 | Met workload limits |
| 2 | 10000 | 9995.32 | 1.55 / 2.87 | 0 / 832 | Met workload limits |
| 2 | 25000 | 24219.43 | 11.65 / 15.06 | 0 / 140489 | latency limit exceeded |

p95 ≤ 10 ms · p99 ≤ 25 ms · errors ≤ 1.0%

### Redis persistent queue
Measured

Enqueue, consume and acknowledge payloads with append-only persistence.

Redis persistent queue measurements| Repeat | Offered / s | jobs/s | p95 / p99 ms | Errors / dropped | Result |
| --- | --- | --- | --- | --- | --- |
| 1 | 100 | 100 | 4.82 / 5.76 | 0 / 0 | Met workload limits |
| 1 | 500 | 500 | 3.63 / 4.65 | 0 / 0 | Met workload limits |
| 1 | 1000 | 999.99 | 3.77 / 5.06 | 0 / 0 | Met workload limits |
| 1 | 3000 | 2999.98 | 6.54 / 11.4 | 0 / 0 | Met workload limits |
| 2 | 100 | 100 | 4.76 / 5.62 | 0 / 0 | Met workload limits |
| 2 | 500 | 500 | 3.68 / 4.7 | 0 / 0 | Met workload limits |
| 2 | 1000 | 999.99 | 3.77 / 5.3 | 0 / 0 | Met workload limits |
| 2 | 3000 | 2999.88 | 6.32 / 11.4 | 0 / 18 | Met workload limits |

p95 ≤ 20 ms · p99 ≤ 50 ms · errors ≤ 1.0%

### Discourse community
Failed

Signed-in reading, search, posting and replies in a populated Rails forum.

RuntimeError: RuntimeError: ValueError: GET /session/csrf returned HTTP 503

p95 ≤ 1500 ms · p99 ≤ 3000 ms · errors ≤ 1.0%

### n8n workflows
Measured

Webhook, transformation, branching and a verified final response.

n8n workflows measurements| Repeat | Offered / s | workflows/s | p95 / p99 ms | Errors / dropped | Result |
| --- | --- | --- | --- | --- | --- |
| 1 | 5 | 5 | 55.82 / 83.59 | 0 / 0 | Met workload limits |
| 1 | 20 | 20 | 50.44 / 202.06 | 0 / 0 | Met workload limits |
| 1 | 50 | 0 | 7013.92 / 7013.92 | 6625 / 2375 | no completed operations |
| 1 | 100 | 0 | 7013.92 / 7013.92 | 6656 / 11344 | no completed operations |
| 2 | 5 | 5 | 54.15 / 69.02 | 0 / 0 | Met workload limits |
| 2 | 20 | 20 | 49.93 / 172.17 | 0 / 0 | Met workload limits |
| 2 | 50 | 1.09 | 7013.92 / 7013.92 | 6422 / 2375 | latency limit exceeded |
| 2 | 100 | 0 | 7013.92 / 7013.92 | 7136 / 10864 | no completed operations |

p95 ≤ 1000 ms · p99 ≤ 2000 ms · errors ≤ 1.0%

### n8n queue workers
Measured

Completed queued workflows including waiting time and worker execution.

n8n queue workers measurements| Repeat | Offered / s | workflows/s | p95 / p99 ms | Errors / dropped | Result |
| --- | --- | --- | --- | --- | --- |
| 1 | 5 | 5 | 77.9 / 117.65 | 0 / 0 | Met workload limits |
| 1 | 20 | 20 | 353.5 / 824.9 | 0 / 0 | Met workload limits |
| 1 | 50 | 16.99 | 9085.12 / 9085.12 | 2615 / 3213 | latency limit exceeded |
| 1 | 100 | 16.01 | 9085.12 / 9085.12 | 2473 / 12527 | latency limit exceeded |
| 2 | 5 | 5 | 71.14 / 103.25 | 0 / 0 | Met workload limits |
| 2 | 20 | 20 | 146.68 / 346.51 | 0 / 0 | Met workload limits |
| 2 | 50 | 29.2 | 9085.12 / 9085.12 | 417 / 3137 | latency limit exceeded |
| 2 | 100 | 25.83 | 9085.12 / 9085.12 | 989 / 12178 | latency limit exceeded |

p95 ≤ 2000 ms · p99 ≤ 4000 ms · errors ≤ 1.0%

### Ghost publishing
Measured

Readers, authenticated draft creation, publishing and image uploads.

Ghost publishing measurements| Repeat | Offered / s | journeys/s | p95 / p99 ms | Errors / dropped | Result |
| --- | --- | --- | --- | --- | --- |
| 1 | 5 | 5 | 703.34 / 784.82 | 0 / 0 | Met workload limits |
| 1 | 20 | 17.55 | 7013.92 / 7013.92 | 355 / 0 | latency limit exceeded |
| 1 | 50 | 0.7 | 7013.92 / 7013.92 | 6494 / 2375 | latency limit exceeded |
| 1 | 100 | 0.67 | 7013.92 / 7013.92 | 6594 / 11281 | latency limit exceeded |
| 2 | 5 | 5 | 724.69 / 884.48 | 0 / 0 | Met workload limits |
| 2 | 20 | 17.58 | 7013.92 / 7013.92 | 355 / 0 | latency limit exceeded |
| 2 | 50 | 0.74 | 7013.92 / 7013.92 | 6487 / 2375 | latency limit exceeded |
| 2 | 100 | 0.65 | 7013.92 / 7013.92 | 6590 / 11288 | latency limit exceeded |

p95 ≤ 1000 ms · p99 ≤ 2000 ms · errors ≤ 1.0%

### Formbricks / Next.js
Failed

Public survey rendering, persisted responses and authenticated analysis.

RuntimeError: RuntimeError: TimeoutError:

p95 ≤ 1000 ms · p99 ≤ 2000 ms · errors ≤ 1.0%

### Elasticsearch search and ingestion
Measured

Full-text search, filtering and aggregations while new documents are indexed.

Elasticsearch search and ingestion measurements| Repeat | Offered / s | operations/s | p95 / p99 ms | Errors / dropped | Result |
| --- | --- | --- | --- | --- | --- |
| 1 | 10 | 10 | 21.08 / 29.36 | 0 / 0 | Met workload limits |
| 1 | 50 | 50 | 16.91 / 23.63 | 0 / 0 | Met workload limits |
| 1 | 100 | 100 | 18.02 / 29.97 | 0 / 0 | Met workload limits |
| 1 | 250 | 249.25 | 301.32 / 724.69 | 101 / 32 | latency limit exceeded |
| 2 | 10 | 10 | 22.44 / 29.66 | 0 / 0 | Met workload limits |
| 2 | 50 | 50 | 16.74 / 24.38 | 0 / 0 | Met workload limits |
| 2 | 100 | 100 | 16.74 / 24.63 | 0 / 0 | Met workload limits |
| 2 | 250 | 247.63 | 295.36 / 824.9 | 256 / 169 | latency limit exceeded |

p95 ≤ 250 ms · p99 ≤ 500 ms · errors ≤ 1.0%

### GitHub self-hosted runner
Insufficient RAM

A pinned build and test workflow with separate cold and warm dependency caches.

Requires 8192 MiB RAM; plan has 4096 MiB, 3819 MiB detected.

p95 ≤ 3600000 ms · p99 ≤ 3600000 ms · errors ≤ 1.0%

### Odoo Community sales
Failed

Customer lookup, sales order confirmation, stock operations and reporting.

RuntimeError: fixture command in rc-odoo failed: -packages/odoo/cli/shell.py", line 148, in shell self.console(local\_vars) File "/usr/lib/python3/dist-packages/odoo/cli/shell.py", line 82, in console exec(sys.stdin.read(), local\_vars) File "\<string\>", line 1, in \<module\> PermissionError: [Errno 13] Permission denied: '/tmp/rc-seed.py'

p95 ≤ 2000 ms · p99 ≤ 4000 ms · errors ≤ 1.0%

## Advertised vs. measured

| Spec | Advertised | Measured |
| --- | --- | --- |
| vCPU | 2 | 2 |
| CPU | Shared vCPU | 0% of busy CPU time stolen |
| RAM | 4 GB | 3.7 GiB |
| Storage | 40 GB NVMe | 37.5 GiB |
| Architecture | x86\_64 | x86\_64 |
| Virtualization | KVM | KVM |

Guests usually report slightly less RAM and disk than advertised because of kernel reservations and filesystem overhead.

## Detected hardware

**CPU model:** Intel Xeon Processor (Skylake, IBRS, no TSX)

**CPU cores:** 2

**CPU frequency:** 2295 MHz

**AES-NI:** Yes

**VM-x/AMD-V:** No

**RAM reported:** 3.7 GiB

**Swap reported:** 0 MiB

**Disk reported:** 37.5 GiB

**Virtualization reported:** KVM

**CPU steal:** 0% of busy CPU time stolen

**Distro:** Ubuntu 24.04.4 LTS

**Kernel:** 6.8.0-138-generic

**Architecture:** x86\_64

**IPv4 reachable:** Yes

**IPv6 reachable:** Yes

## Advertised at test time

**Plan:** CX23

**Product line:** cost\_optimized

**Location:** Falkenstein DC Park 1

**vCPU:** 2 shared vCPU

**Architecture:** x86\_64

**RAM:** 4 GB

**Storage:** 40 GB NVMe

**Virtualization:** KVM

**Network:** Unknown

**Transfer:** 21.99 TB

**Port 25:** On request

**Monthly price at test time:** $6.49

**Hourly price at test time:** $0.010

**YABS version:** v2026-09-20

**Ran at:** Oct 26, 2026, 19:04:38 UTC

**Parser version:** 5

## Run timeline

**Queued:** Oct 24, 2026, 08:06:00 UTC

**Server created:** Oct 26, 2026, 19:03:41 UTC

**First update from the server:** Oct 26, 2026, 19:03:41 UTC

**Completed:** Oct 26, 2026, 23:59:26 UTC

**Server deleted:** Oct 26, 2026, 23:59:26 UTC

**Cost of this run:** $0.051

Tests 46 of 50 done Live output 1265 lines

Setup 2 cores, 3.7 GiB RAM 4 of 4Done

Disk (fio) 158 MB/s at 4k, 3.02 GB/s at 1m 5 of 5Done

Network, IPv4 (iperf3) Median 2.45 Gbit/s send, 2.57 Gbit/s receive, 2 retried 3 of 3Done

Geekbench 7, single-core Score 653 17 of 17Done

Geekbench 7, multi-core Score 1,193 9 of 9Done

Web apps 4 failed, 1 skipped 7 of 11Some failed

TestResultTime

PostgreSQL transactions 8 measured trials completed 8 trials Measurements, 8 measured trials completed 30m 08s

PostgreSQL large dataset RuntimeError: RuntimeError: TimeoutError: Stopped RuntimeError: RuntimeError: TimeoutError: 2m 12s

Redis cache 8 measured trials completed 8 trials Measurements, 8 measured trials completed 28m 31s

Redis persistent queue 8 measured trials completed 8 trials Measurements, 8 measured trials completed 28m 27s

Discourse community RuntimeError: RuntimeError: ValueError: GET /session/csrf returned HTTP 503 Stopped RuntimeError: RuntimeError: ValueError: GET /session/csrf returned HTTP 503 15m 38s

n8n workflows 8 measured trials completed 8 trials Measurements, 8 measured trials completed 33m 59s

n8n queue workers 8 measured trials completed 8 trials Measurements, 8 measured trials completed 34m 00s

Ghost publishing 8 measured trials completed 8 trials Measurements, 8 measured trials completed 35m 57s

Formbricks / Next.js RuntimeError: RuntimeError: TimeoutError: Stopped RuntimeError: RuntimeError: TimeoutError: 21m 21s

Elasticsearch search and ingestion 8 measured trials completed 8 trials Measurements, 8 measured trials completed 40m 04s

GitHub self-hosted runner Requires 8192 MiB RAM; plan has 4096 MiB, 3819 MiB detected. Not run Requires 8192 MiB RAM; plan has 4096 MiB, 3819 MiB detected.

Odoo Community sales Application workloads Stopped RuntimeError: fixture command in rc-odoo failed: -packages/odoo/cli/shell.py", line 148, in shell self.console(local\_vars) File "/usr/lib/python3/dist-packages/odoo/cli/shell.py", line 82, in console exec(sys.stdin.read(), local\_vars) File "\<string\>", line 1, in \<module\> PermissionError: [Errno 13] Permission denied: '/tmp/rc-seed.py' 3m 24s

Finish Results saved 1 of 1Done

Watch party 0 watching

This party closed at 00:59 UTC. It's read only now.

## Watch party

Loading the party
