Advertisement
Hosting

I benchmarked five VPS providers for a side project

I needed a $20-ish/month VPS to host a side project — a small job queue and API, nothing exotic — and instead of picking whichever provider I'd used last time out of habit, I decided to actually test five of them against each other on the same workload. This is that comparison, with real numbers, not marketing benchmarks.

I signed up for a plan at each of five providers at a comparable price point ($18-$24/month, 2 vCPU, 4GB RAM, NVMe storage where offered), spun up identical Ubuntu 24.04 images, and ran the same battery of tests on each: sysbench CPU, fio for disk, iperf3 against a fixed reference point, and a crude real-world test — building and running my actual app's Docker image and hitting it with a small load test.

Here's the shortlist I tested: DigitalOcean, Hetzner Cloud, Vultr, Linode (now Akamai Cloud Compute), and OVHcloud. All five let you sign up and have a box running in under five minutes, which says more about how commoditized basic VPS hosting has become than anything else in this post.

Advertisement

The five providers, plans, and what I paid

ProviderPlan testedPrice/movCPU / RAM
Hetzner CloudCPX21$18.493 vCPU / 4GB
DigitalOceanPremium AMD, 4GB$24.002 vCPU / 4GB
VultrHigh Frequency, 4GB$24.002 vCPU / 4GB
Akamai Cloud Compute (Linode)Dedicated 4GB$36.002 vCPU / 4GB
OVHcloudComfort, 4GB$21.002 vCPU / 4GB

I let the price gap on Akamai/Linode stand rather than downgrading the plan, because their 4GB tier at a comparable price to the others only offers shared CPU, and I wanted to test what most people would actually pick.

CPU and disk benchmarks

Sysbench CPU (events per second, single-threaded, higher is better):

  • Hetzner CPX21: 4,812
  • DigitalOcean: 4,390
  • Vultr: 4,260
  • OVHcloud: 4,105
  • Akamai/Linode (dedicated): 5,120 — unsurprising given it's dedicated rather than shared CPU

Disk, via fio random 4k write (IOPS):

fio --name=randwrite --ioengine=libaio --rw=randwrite \
    --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 \
    --group_reporting

Hetzner CPX21:       61,400 IOPS
DigitalOcean:        44,200 IOPS
Vultr:                38,900 IOPS
OVHcloud:             29,700 IOPS
Akamai (Linode):      52,100 IOPS

Hetzner's NVMe performance at that price point is genuinely startling compared to the others — it's the one number in this whole test that made me say "that can't be right" and run it three more times. It was right.

Network and real-world app performance

iperf3 throughput to a fixed test point in Frankfurt varied more by physical datacenter location than by provider, which is a fair reminder that "network performance" is mostly about where you and your users are, not which company's logo is on the invoice. For the actual app test — building my Docker image and running a 500-request load test against a simple CRUD endpoint — median response time came in within 8ms of each other across all five providers once warmed up. At this workload size, the app itself was never the bottleneck; database connection pooling settings mattered more than host provider.

Bandwidth, snapshots, and the costs that aren't on the pricing page

The advertised monthly price is never the whole story, and this is where the providers actually diverge the most. Hetzner includes 20TB of outbound traffic before any overage, which for a small side project is effectively unlimited; DigitalOcean and Vultr both include smaller pools (around 4TB and 3TB respectively at this tier) before charging per-gigabyte overage, which matters if your project ever serves media or has a traffic spike you didn't plan for. Snapshot pricing varies just as much — some providers charge per-GB-month for snapshot storage regardless of how often you take one, others bundle a generous free allowance into the plan. None of this shows up clearly on the comparison pages marketing teams build, and all of it is worth reading the actual billing documentation for before you commit, especially if you expect to grow past a toy workload.

I also priced out what it would cost to double the plan size on each provider, since side projects tend to need more headroom within the first year, not less. Hetzner and Akamai/Linode both had the smoothest upgrade path — resize in place with a short reboot, no data migration required. DigitalOcean and Vultr were similar. OVHcloud required slightly more manual intervention to resize the plan I'd chosen, which is a small thing until you're doing it during a traffic spike at an inconvenient hour.

Support and sign-up friction

I filed an identical low-priority support ticket with each provider ("does your block storage support online resize?") to get a feel for response time on a budget plan, where you often get deprioritized support:

  • Hetzner: 4 hours, correct and specific answer
  • DigitalOcean: 2 hours, correct answer with a docs link
  • Vultr: 6 hours, correct but generic answer
  • OVHcloud: 22 hours, eventually correct
  • Akamai/Linode: 3 hours, correct and detailed

Sign-up friction was close across the board, though Hetzner and OVHcloud both ran manual account review on a new signup from a residential IP, which delayed my first server by about ninety minutes each — worth knowing if you need a box running in the next ten minutes rather than the next two hours.

So which one would I actually recommend

For this side project, I kept it on Hetzner. The price-to-performance ratio isn't close, and the support response was fast enough for a budget tier. The honest caveats: Hetzner doesn't have as many regions as DigitalOcean or Akamai, so if your users are concentrated somewhere Hetzner doesn't serve well, that matters more than the benchmark numbers. And if you want the broadest ecosystem of one-click app installs, managed databases, and tutorials for every possible stack, DigitalOcean's docs and community content are still the best of the five, which is worth something even at a slightly higher price.

If I were choosing for a team rather than a side project, I'd lean toward whichever provider your cloud spend is already concentrated with for billing and support-contract reasons — the performance differences here, while real, are small enough that vendor consolidation usually wins on a longer time horizon.

About the author


Founder and senior backend engineer

Maya Ferris started Stacklog in 2019 after typing out one too many long Slack explanations she wished she could just link to instead. She has spent twelve years as a backend engineer at mid-sized companies, running production databases, migrating observability stacks, and building on-call rotations, and most of what she writes starts from a migration or an incident she actually worked. She is based in Portland and currently spends more time than she'd like thinking about cron and NAS fan curves.

More from Maya