# VPSServer.com 2A 2GB 40GB

[Los Angeles](https://rackcensus.com/locations/los-angeles-vps-benchmarks "Every provider in Los Angeles")

Benchmark complete

Finished Oct 14, 2026

Geekbench 7 single-core

Skipped

Median here: 1,405 over 2 runs in 90 days

Geekbench 7 multi-core

Skipped

Disk 4K IOPS

107,161

fio random read and write, 50/50

Median here: 105,753 over 2 runs in 90 days

Monthly price at test time

$13.00

Same price today

## Server

[VPSServer.com](https://rackcensus.com/vps-providers/vpsserver-benchmarks)[2A 2GB 40GB](https://rackcensus.com/plans/ylh3ht-vpsserver-2a-2gb-40gb-benchmarks?location=US-LA)

-

Provider

VPSServer.com

-

Plan

2A 2GB 40GB

-

Location

Los Angeles

-

vCPU

2

-

RAM

2 GB

-

Storage

40 GB SSD

-

Network

Unknown

-

OS image

ubuntu\_server\_24.04\_64-bit

-

Trigger

Scheduled

-

Queued at

Oct 14, 2026, 13:24:00 UTC

[Visit VPSServer.com](https://rackcensus.com/go/vpsserver)

## Latest runs of this plan

- [Atlanta Oct 13, 2026](https://rackcensus.com/benchmarks/kzt7da-vpsserver-2a-2gb-40gb-us-at-benchmark)1,340
- [Los Angeles Oct 12, 2026](https://rackcensus.com/benchmarks/8fi5ne-vpsserver-2a-2gb-40gb-us-la-benchmark)1,405

[Full history of this plan](https://rackcensus.com/plans/ylh3ht-vpsserver-2a-2gb-40gb-benchmarks/history)

## CPU

Geekbench was skipped because this server didn't have the free memory for the multi-core run and couldn't run single-core only either. The run log has the details.

## Memory, TLS and scheduler

### Memory bandwidth (STREAM)

| Test | Result | Runs | Spread |
| --- | --- | --- | --- |
| Copy higher is better | 43.9 GB/s | 3 | 1.71% |
| Scale higher is better | 25.5 GB/s | 3 | 4.94% |
| Add higher is better | 32.4 GB/s | 3 | 2.02% |
| Triad higher is better | 32 GB/s | 3 | 3.33% |

Average of 3 runs. Spread is the standard deviation as a share of the average.

### TLS and crypto (OpenSSL)

| Test | Result | Runs | Spread |
| --- | --- | --- | --- |
| RSA 4096 signs higher is better | 1,021/s | 3 | 1.81% |
| RSA 4096 verifies higher is better | 29,142/s | 3 | 0.123% |
| SHA-256 higher is better | 1.69 GB/s | 3 | 0.271% |
| AES-256-GCM higher is better | 24.3 GB/s | 3 | 0.191% |
| ChaCha20-Poly1305 higher is better | 7.11 GB/s | 3 | 0.549% |

Average of 3 runs. Spread is the standard deviation as a share of the average.

### Scheduler latency (schbench)

| Test | Result | Runs | Spread |
| --- | --- | --- | --- |
| Request latency, median lower is better | 2.39 ms | 3 | 0.335% |
| Requests per second, 90th percentile higher is better | 818/s | 3 | 0.374% |
| Request latency, 99.9th percentile lower is better | 5.36 ms | 3 | 5.38% |
| Requests per second, average higher is better | 792/s | 3 | 0.391% |

Average of 3 runs. Spread is the standard deviation as a share of the average.

## Disk

| Block size | Read | Write | Total |
| --- | --- | --- | --- |
| 4K | 209 MB/s (53,510 IOPS) | 209.6 MB/s (53,651 IOPS) | 418.6 MB/s (107,161 IOPS) |
| 64K | 2.13 GB/s (34,916 IOPS) | 2.14 GB/s (35,100 IOPS) | 4.27 GB/s (70,016 IOPS) |
| 512K | 4.27 GB/s (8,750 IOPS) | 4.5 GB/s (9,214 IOPS) | 8.77 GB/s (17,964 IOPS) |
| 1M | 4.68 GB/s (4,787 IOPS) | 4.99 GB/s (5,106 IOPS) | 9.66 GB/s (9,893 IOPS) |

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

## Network

iperf3 didn't report network results for this run.

## Datastores

### PostgreSQL

#### fsync speed (pg\_test\_fsync)

| Method | Operations per second | Time per operation |
| --- | --- | --- |
| One 8 kB write |
| --- |
| open\_datasync | 9,071 | 0.11 ms |
| fdatasync | 8,547 | 0.117 ms |
| fsync | 7,189 | 0.139 ms |
| fsync\_writethrough | Not supported here | n/a |
| open\_sync | 7,424 | 0.135 ms |
| Two 8 kB writes |
| --- |
| open\_datasync | 4,628 | 0.216 ms |
| fdatasync | 8,229 | 0.122 ms |
| fsync | 6,865 | 0.146 ms |
| fsync\_writethrough | Not supported here | n/a |
| open\_sync | 3,408 | 0.293 ms |
| open\_sync at different write sizes |
| --- |
| 1 \* 16kB open\_sync write | 6,925 | 0.144 ms |
| 2 \* 8kB open\_sync writes | 3,465 | 0.289 ms |
| 4 \* 4kB open\_sync writes | 1,851 | 0.54 ms |
| 8 \* 2kB open\_sync writes | 931 | 1.07 ms |
| 16 \* 1kB open\_sync writes | 465 | 2.15 ms |
| fsync on a non-write descriptor |
| --- |
| write, fsync, close | 6,608 | 0.151 ms |
| write, close, fsync | 6,492 | 0.154 ms |
| Non-synced 8 kB writes |
| --- |
| write | 1,623,938 | 0.001 ms |

pg\_test\_fsync against the Docker volume Postgres keeps its data on. fdatasync is Linux's default wal\_sync\_method.

#### pgbench at scale 10

| Workload | Clients | Transactions/s | Median | p95 | p99 | p99.9 | Failed |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Read/write (TPC-B like) | 1 | 3,119 | 0.246 ms | 0.519 ms | 1.11 ms | 2.74 ms | 0 |
| Read/write (TPC-B like) | 8 | 8,041 | 0.866 ms | 1.78 ms | 3.25 ms | 7.15 ms | 0 |
| Read/write (TPC-B like) | 32 | 6,801 | 3.61 ms | 11.5 ms | 19.7 ms | 33.1 ms | 0 |
| Read only | 1 | 41,970 | 0.016 ms | 0.047 ms | 0.057 ms | 0.104 ms | 0 |
| Read only | 8 | 85,948 | 0.084 ms | 0.139 ms | 0.17 ms | 0.349 ms | 0 |
| Read only | 32 | 82,134 | 0.341 ms | 0.565 ms | 0.908 ms | 1.72 ms | 0 |

Scale 10 (1,000,000 accounts), loaded in 1.08 s. 60 s per run, prepared statements. Latency comes from sampled transaction logs, and p99.9 is left out when fewer than 1,000 were sampled.

#### pgbench at scale 100

| Workload | Clients | Transactions/s | Median | p95 | p99 | p99.9 | Failed |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Read/write (TPC-B like) | 1 | 1,748 | 0.518 ms | 0.82 ms | 2.21 ms | 5.33 ms | 0 |
| Read/write (TPC-B like) | 8 | 5,833 | 1.15 ms | 2.83 ms | 5.43 ms | 9.02 ms | 0 |
| Read/write (TPC-B like) | 32 | 7,040 | 4.15 ms | 7.73 ms | 10.9 ms | 17.7 ms | 0 |
| Read only | 1 | 11,262 | 0.06 ms | 0.203 ms | 0.425 ms | 1.88 ms | 0 |
| Read only | 8 | 50,886 | 0.118 ms | 0.355 ms | 0.541 ms | 2.02 ms | 0 |
| Read only | 32 | 45,052 | 0.581 ms | 1.26 ms | 2 ms | 3.35 ms | 0 |

Scale 100 (10,000,000 accounts), loaded in 10.9 s. 60 s per run, prepared statements. Latency comes from sampled transaction logs, and p99.9 is left out when fewer than 1,000 were sampled.

### MySQL

#### sysbench OLTP

| Workload | Threads | Transactions/s | Queries/s | Median | p95 | p99 | Errors |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Read/write | 1 | 480 | 9,599 | 1.93 ms | 3.08 ms | 6.1 ms | 0 |
| Read/write | 8 | 1,100 | 21,998 | 6.67 ms | 12.5 ms | 17 ms | 0 |
| Read/write | 32 | 1,391 | 27,817 | 21.9 ms | 38.9 ms | 52.9 ms | 0 |
| Read only | 1 | 1,018 | 16,293 | 0.92 ms | 1.25 ms | 1.55 ms | 0 |
| Read only | 8 | 3,090 | 49,437 | 2.48 ms | 3.43 ms | 4.03 ms | 0 |
| Read only | 32 | 2,495 | 39,926 | 12.5 ms | 16.4 ms | 20 ms | 0 |

10 tables of 100,000 rows, loaded in 6 s. 60 s per run, one connection per thread.

### Redis

#### memtier

| Mix | Operations/s | Hits/s | Median | p99 | p99.9 |
| --- | --- | --- | --- | --- | --- |
| 1:10 set:get | 107,543 | 97,766 | 0.335 ms | 2.42 ms | 4.26 ms |
| 1:1 set:get | 103,977 | 51,988 | 0.375 ms | 2.4 ms | 3.98 ms |

1,000,000 keys of 32 bytes. 64 connections over 2 threads, 60 s per ratio.

## Web frameworks

| Framework | Fortunes req/s | Single query req/s | JSON req/s | Fortunes p99 at 256 connections |
| --- | --- | --- | --- | --- |
| Next.js nextjs | 453 | 1,876 | 2,098 | 1.99 s |
| Express express-postgresjs | 7,672 | 12,436 | 63,224 | 58.9 ms |
| Fastify fastify-postgres | 7,388 | 11,827 | 77,264 | 83.5 ms |
| NestJS nestjs | 7,034 | 6,926 | 42,390 | 88.2 ms |
| Nuxt nuxt | 6,625 | 12,298 | 52,535 | 72.9 ms |
| FastAPI fastapi | 4,631 | 6,368 | 25,309 | 320 ms |
| Django django-postgresql | 1,452 | 1,658 | 4,350 | 240 ms |
| Rails rails | 2,745 | 3,796 | 21,550 | 131 ms |
| Laravel laravel | 836 | 891 | 1,509 | 331 ms |
| Symfony symfony | 1,019 | 1,099 | 3,181 | 293 ms |

Peak requests per second across the 64 and 256 connection levels, measured with wrk. Each test has to pass the TechEmpower response checks first, or it's marked invalid.

## Web apps

### WooCommerce

#### Page mix

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 8 virtual users |
| --- |
| Home page | 2.49 | 634 ms | 731 ms | 779 ms | 0% |
| Shop page | 2.49 | 869 ms | 975 ms | 1 s | 0% |
| Category page | 2.49 | 540 ms | 875 ms | 931 ms | 0% |
| Product page | 2.49 | 586 ms | 689 ms | 750 ms | 0% |
| Product search | 2.49 | 511 ms | 585 ms | 611 ms | 0% |
| 32 virtual users |
| --- |
| Home page | 2.48 | 2.32 s | 2.65 s | 2.81 s | 0% |
| Shop page | 2.48 | 3.11 s | 3.52 s | 3.59 s | 0% |
| Category page | 2.48 | 2.75 s | 3.28 s | 3.49 s | 0% |
| Product page | 2.48 | 2.43 s | 2.67 s | 2.71 s | 0% |
| Product search | 2.48 | 2.16 s | 2.43 s | 2.55 s | 0% |

#### Cart and checkout

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 8 virtual users |
| --- |
| Add to cart | 4.84 | 697 ms | 801 ms | 857 ms | 0% |
| Cart | 4.84 | 552 ms | 631 ms | 650 ms | 0% |
| Checkout | 4.84 | 420 ms | 484 ms | 509 ms | 0% |
| 32 virtual users |
| --- |
| Add to cart | 4.83 | 2.29 s | 2.8 s | 2.95 s | 0% |
| Cart | 4.83 | 2.38 s | 2.65 s | 2.74 s | 0% |
| Checkout | 4.83 | 1.86 s | 2.17 s | 2.24 s | 0% |

k6 with a fixed number of virtual users, 61 to 66 s per level. The error rate counts responses that weren't a 200.

### Discourse

#### Signed in

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Topic page | 2.42 | 182 ms | 241 ms | 392 ms | 0% |
| Topic JSON | 1.23 | 92.5 ms | 123 ms | 202 ms | 0% |
| Home page | 1.23 | 161 ms | 238 ms | 323 ms | 0% |
| Categories page | 0.613 | 183 ms | 216 ms | 244 ms | 0% |
| User activity page | 0.597 | 113 ms | 220 ms | 340 ms | 0% |
| 4 virtual users |
| --- |
| Topic page | 4.28 | 402 ms | 535 ms | 1.03 s | 0% |
| Topic JSON | 2.15 | 211 ms | 282 ms | 333 ms | 0% |
| Home page | 2.11 | 355 ms | 571 ms | 800 ms | 0% |
| Categories page | 1.11 | 424 ms | 907 ms | 1.26 s | 0% |
| User activity page | 1.06 | 261 ms | 560 ms | 822 ms | 0% |
| 16 virtual users |
| --- |
| Topic page | 4.2 | 1.41 s | 1.78 s | 1.92 s | 0% |
| Topic JSON | 2.13 | 1.21 s | 1.51 s | 1.7 s | 0% |
| Home page | 2.1 | 1.35 s | 1.68 s | 1.84 s | 0% |
| Categories page | 1.07 | 1.4 s | 1.69 s | 1.81 s | 0% |
| User activity page | 1.07 | 1.25 s | 1.59 s | 1.9 s | 0% |

#### Anonymous

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 16 virtual users |
| --- |
| Topic page | 92.9 | 46.2 ms | 120 ms | 154 ms | 0% |
| Topic JSON | 46.4 | 43.3 ms | 119 ms | 145 ms | 0% |
| Home page | 46.5 | 47.1 ms | 121 ms | 151 ms | 0% |
| Categories page | 23.2 | 46.4 ms | 121 ms | 160 ms | 0% |
| User activity page | 23.3 | 158 ms | 251 ms | 356 ms | 0% |

k6 with a fixed number of virtual users, 60 to 61 s per level, after a 22 s warmup. The error rate counts responses that weren't a 200. Discourse ran with 4 app workers and 256 MB of Postgres shared buffers, what its installer picks for a 2 GB box. It added a 2 GB swapfile first, the way its installer does, and used up to 722 MB of it. The container peaked at 1,455 MB.

### Ghost

#### Readers

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Home page | 10 | 27.1 ms | 34.4 ms | 45.8 ms | 0% |
| Post page | 25 | 15.5 ms | 19.6 ms | 29.9 ms | 0% |
| Tag page | 5 | 19 ms | 25.2 ms | 39.8 ms | 0% |
| Author page | 5 | 18.8 ms | 24.2 ms | 30 ms | 0% |
| RSS feed | 5 | 22.2 ms | 26.8 ms | 35.7 ms | 0% |
| 4 virtual users |
| --- |
| Home page | 12.3 | 81.7 ms | 109 ms | 136 ms | 0% |
| Post page | 30.7 | 60.8 ms | 85.8 ms | 114 ms | 0% |
| Tag page | 6.14 | 54.2 ms | 80.6 ms | 104 ms | 0% |
| Author page | 6.13 | 54 ms | 79.6 ms | 105 ms | 0% |
| RSS feed | 6.11 | 57.9 ms | 80 ms | 112 ms | 0% |
| 16 virtual users |
| --- |
| Home page | 12.5 | 322 ms | 400 ms | 433 ms | 0% |
| Post page | 31.1 | 268 ms | 350 ms | 380 ms | 0% |
| Tag page | 6.22 | 173 ms | 238 ms | 268 ms | 0% |
| Author page | 6.2 | 176 ms | 235 ms | 260 ms | 0% |
| RSS feed | 6.2 | 177 ms | 249 ms | 273 ms | 0% |

#### Staff in Ghost Admin

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Post list | 5.28 | 26.9 ms | 37.9 ms | 51.3 ms | 0% |
| Post editor | 15.9 | 11.4 ms | 15.4 ms | 19.9 ms | 0% |
| Saving a draft | 15.9 | 27.9 ms | 35.9 ms | 48.2 ms | 0% |
| Member list | 5.3 | 29.6 ms | 39 ms | 48.6 ms | 0% |
| 4 virtual users |
| --- |
| Post list | 6.69 | 34.5 ms | 45.1 ms | 90.3 ms | 0% |
| Post editor | 20.1 | 20.8 ms | 27.3 ms | 60.3 ms | 0% |
| Saving a draft | 20.1 | 143 ms | 192 ms | 236 ms | 0% |
| Member list | 6.71 | 40.8 ms | 51.5 ms | 81.2 ms | 0% |

k6 with a fixed number of virtual users, 60 s per level, after a 20 s warmup. The error rate counts responses that weren't a 200. Ghost ran the way its ghost-docker setup runs it: one Node process, and MySQL with its stock 128 MB buffer pool. Memory peaked with Ghost at 369 MB and MySQL at 580 MB.

### Wagtail

#### Visitors

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Home page | 1.86 | 70.4 ms | 79.7 ms | 89.2 ms | 0% |
| Blog index | 1.86 | 237 ms | 283 ms | 300 ms | 0% |
| Blog post | 5.54 | 23.1 ms | 34.3 ms | 37.7 ms | 0% |
| Bread page | 5.56 | 25.2 ms | 30.6 ms | 34.9 ms | 0% |
| Location page | 1.86 | 24.5 ms | 27.7 ms | 30.8 ms | 0% |
| Site search | 1.84 | 39 ms | 64.5 ms | 66.5 ms | 0% |
| 4 virtual users |
| --- |
| Home page | 3.1 | 177 ms | 256 ms | 301 ms | 0% |
| Blog index | 3.1 | 612 ms | 813 ms | 905 ms | 0% |
| Blog post | 9.29 | 54.2 ms | 85.7 ms | 108 ms | 0% |
| Bread page | 9.28 | 59.3 ms | 88 ms | 112 ms | 0% |
| Location page | 3.12 | 58.5 ms | 84.4 ms | 105 ms | 0% |
| Site search | 3.1 | 80.7 ms | 161 ms | 199 ms | 0% |
| 16 virtual users |
| --- |
| Home page | 2.91 | 637 ms | 808 ms | 887 ms | 0% |
| Blog index | 2.99 | 1.61 s | 2.02 s | 2.14 s | 0% |
| Blog post | 8.73 | 363 ms | 522 ms | 606 ms | 0% |
| Bread page | 8.8 | 384 ms | 529 ms | 651 ms | 0% |
| Location page | 2.93 | 375 ms | 540 ms | 636 ms | 0% |
| Site search | 2.93 | 441 ms | 652 ms | 774 ms | 0% |

#### Editors in the Wagtail admin

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Admin dashboard | 0.809 | 77.6 ms | 95.1 ms | 106 ms | 0% |
| Page explorer | 1.64 | 281 ms | 426 ms | 457 ms | 0% |
| Page editor | 2.43 | 135 ms | 182 ms | 258 ms | 0% |
| Image library | 0.809 | 54.3 ms | 69 ms | 455 ms | 0% |
| Admin page search | 0.809 | 31.7 ms | 68.1 ms | 75.2 ms | 0% |
| 4 virtual users |
| --- |
| Admin dashboard | 1.38 | 205 ms | 405 ms | 470 ms | 0% |
| Page explorer | 2.73 | 663 ms | 1.18 s | 1.27 s | 0% |
| Page editor | 4.13 | 326 ms | 638 ms | 744 ms | 0% |
| Image library | 1.38 | 156 ms | 373 ms | 419 ms | 0% |
| Admin page search | 1.38 | 80.8 ms | 220 ms | 335 ms | 0% |

k6 with a fixed number of virtual users, 60 to 61 s per level, after a 20 s warmup. The error rate counts responses that weren't a 200. Wagtail ran the way bakerydemo ships it: uWSGI with 2 workers of 4 threads each, whatever the box, and Postgres and Redis on stock settings. Memory peaked with Wagtail at 298 MB, Postgres at 168 MB, and Redis at 26 MB.

## Advertised vs. measured

| Spec | Advertised | Measured |
| --- | --- | --- |
| vCPU | 2 | 2 |
| CPU | Shared vCPU | 0% of busy CPU time stolen |
| RAM | 2 GB | 1.9 GiB |
| Storage | 40 GB SSD | 39.3 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 (SapphireRapids)

**CPU cores:** 2

**CPU frequency:** 2700 MHz

**AES-NI:** Yes

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

**RAM reported:** 1.9 GiB

**Swap reported:** 0 MiB

**Disk reported:** 39.3 GiB

**Virtualization reported:** KVM

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

**Distro:** Ubuntu 24.04.5 LTS

**Kernel:** 6.8.0-139-generic

**Architecture:** x86\_64

**IPv4 reachable:** Yes

**IPv6 reachable:** No

## Advertised at test time

**Plan:** 2A 2GB 40GB

**Product line:** Type A Availability

**Location:** Los Angeles

**vCPU:** 2 shared vCPU

**Architecture:** x86\_64

**RAM:** 2 GB

**Storage:** 40 GB SSD

**Virtualization:** KVM

**Network:** Unknown

**Transfer:** 5 TB

**Port 25:** Unknown

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

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

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

**Ran at:** Oct 14, 2026, 13:27:43 UTC

**Parser version:** 5

## Run timeline

**Queued:** Oct 14, 2026, 13:24:00 UTC

**Server created:** Oct 14, 2026, 13:27:41 UTC

**First update from the server:** Oct 14, 2026, 13:27:41 UTC

**Completed:** Oct 14, 2026, 14:50:00 UTC

**Server deleted:** Oct 14, 2026, 14:50:00 UTC

**Cost of this run:** $0.026

Tests 36 of 36 done Live output 743 lines

Setup 2 cores, 1.9 GiB RAM 4 of 4Done

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

Geekbench 7, single-core 0 of 0Skipped

Phoronix (memory, TLS, scheduler) 3 of 3Done

Datastores 5 of 5Done

Web frameworks 10 of 10Done

Web apps 8 of 8Done

Finish Results saved 1 of 1Done

Watch party 0 watching

This party closed at 15:50 UTC. It's read only now.

## Watch party

Loading the party
