Most VPS comparisons rehash marketing specs. We provisioned identical instances across nine providers, ran sysbench CPU tests, fio disk benchmarks, and iperf3 network measurements, then hammered each with Apache Bench under sustained load. The results show which hosts throttle under pressure and which maintain advertised performance.
Test methodology
Each provider received the same setup: a 2-vCPU, 4GB RAM instance running Ubuntu 22.04 LTS, no control panel, root SSH only. We installed identical LAMP stacks (Apache 2.4, MariaDB 10.6, PHP 8.1) and deployed a WordPress 6.5 site with WooCommerce and fifty test products. Then we ran:
- sysbench CPU test (single and multi-threaded, 60 seconds each)
- fio random read/write (4K blocks, direct I/O, 60 seconds)
- iperf3 to three geographically distributed endpoints
- Apache Bench: 10,000 requests, concurrency 50, against a dynamic product page
Tests ran at 0200 UTC to minimize noisy-neighbor variance. Each benchmark repeated three times over five days; we report the median.
Why these metrics matter
CPU performance dictates how fast your application code executes. PHP processing, image resizing, log parsing—all CPU-bound. Disk I/O determines database query speed and file access. When MariaDB flushes InnoDB buffers or WordPress writes cache files, slow disks create user-visible lag. Network throughput affects static asset delivery, API calls, and backup speeds.
Peak specs mean nothing if the hypervisor throttles you after thirty seconds. Sustained performance under load is what you pay for.
The contenders
We tested DigitalOcean, Linode (Akamai), Vultr, Hetzner Cloud, OVHcloud, Contabo, UpCloud, Kamatera, and AWS Lightsail. Prices ranged from four to twenty-four dollars monthly for comparable specs. Geographic test locations: New York (US East), Frankfurt (EU), and Singapore (APAC).
Each host offers hourly billing except Contabo and OVHcloud, which require monthly commitments. All provide KVM virtualization, and all claim SSD or NVMe storage. Reality varies.
CPU performance: single-threaded
Single-threaded sysbench measures events per second—higher is better. This test stresses one vCPU core completely, simulating PHP-FPM workers handling requests serially.
Linode and UpCloud led the pack, delivering 15-20% better single-thread performance than the median. DigitalOcean and Vultr clustered near the middle. Contabo lagged noticeably, showing signs of oversubscription; scores fluctuated between runs, and late-night tests outperformed daytime by 30%.
AWS Lightsail performed adequately but caps burst credits. After ten minutes of sustained load, performance dropped by half until credits replenished. Fine for bursty workloads; problematic for steady traffic.
Multi-threaded results
With two threads, the picture shifted. Hetzner Cloud jumped ahead, suggesting its CPUs handle parallelism well—probably newer AMD EPYC silicon. Kamatera fell behind expectations, likely due to older Xeon processors.
OVHcloud posted respectable multi-thread numbers but suffered jitter. Standard deviation was double the field average, indicating inconsistent resource allocation. Your mileage will vary depending on when you run jobs.
Disk I/O: where NVMe claims meet reality
We measured random 4K read and write IOPS with fio, a filesystem and cache torture test. Databases live and die by random I/O.
UpCloud dominated with genuine NVMe performance: over 40,000 read IOPS and 15,000 write IOPS. Hetzner followed at roughly half that—still excellent for the price. DigitalOcean and Linode delivered solid mid-tier numbers, and Vultr matched them.
Contabo's "SSD storage" struggled. Read IOPS hovered around 3,000; writes sometimes dipped below 1,000. That's barely better than spinning rust. Check your invoice. If you're running WordPress with object caching and static CDN delivery, you might not notice. If you're running a write-heavy app or a busy WooCommerce store, you will.
Kamatera showed odd behavior: initial IOPS looked strong, then cratered after fifteen seconds. Possible write-back cache exhaustion. Repeated tests confirmed the pattern.
AWS Lightsail offers "burstable" disk performance backed by EBS. Translation: you get credits that drain fast under sustained load, then performance drops to baseline. Baseline varies by instance size. For a 2-vCPU instance, baseline is low—around 1,800 IOPS. Budget accordingly.
Network throughput and latency
We ran iperf3 tests to endpoints in the same region, cross-region within the same provider, and to external hosts. Intra-datacenter bandwidth matters for database replication, backups to object storage, and microservice communication. External bandwidth matters for user-facing traffic and third-party API calls.
Internal bandwidth
All providers delivered 1Gbps or better between instances in the same datacenter. UpCloud and Hetzner hit 2-3Gbps in some tests, suggesting 10Gbps backend links. Contabo capped at 1Gbps but maintained it consistently.
OVHcloud occasionally showed packet loss—rare but reproducible. Traceroute revealed congestion on internal switches during peak EU hours. Something to watch if you're running a multi-node setup.
External bandwidth
Most providers provision 1Gbps uplinks but apply traffic quotas. DigitalOcean, Linode, and Vultr include 1-3TB monthly transfer; overages cost a few cents per GB. Hetzner includes 20TB, which is absurd for a small VPS. Contabo includes 32TB but at lower sustained speeds—around 500Mbps in testing.
Latency to common CDN edge locations (Cloudflare, Fastly) was low across the board from US and EU instances. Singapore instances showed more variance; OVHcloud's APAC latency lagged competitors by 15-20ms on average.
WordPress load test: the real-world stress check
We used Apache Bench to simulate fifty concurrent users requesting a WooCommerce product page with dynamic pricing, related products, and cart session handling. No page caching, no CDN—pure server stress. This is harder than most production loads but reveals how the VPS behaves under pressure.
UpCloud and Hetzner handled 10,000 requests with zero failed responses and median response times under 400ms. Linode and DigitalOcean posted similar numbers with slightly higher tail latency (95th percentile around 800ms).
Vultr showed intermittent spikes—most requests fast, but every few hundred would stall for 2-3 seconds. After digging, we found kernel scheduling latency. Switching from the default kernel to a low-latency variant smoothed it out. Worth noting if you're latency-sensitive.
Contabo struggled. Failed requests climbed above 2%, and median response times exceeded one second. Load average spiked to 8+ on a 2-vCPU box. That's resource contention from neighboring tenants.
Kamatera performed adequately until the disk I/O cache exhausted (around request 4,000), then response times tripled. OVHcloud showed the jitter we saw earlier—some runs were fine, others saw random 5-second pauses.
AWS Lightsail completed the test but burned through CPU credits in minutes. If you ran this load continuously, performance would drop after the first ten minutes and stay low.
What about IPv6, DDoS protection, and backups?
All nine providers offer IPv6. DigitalOcean, Linode, Vultr, and Hetzner include free firewalls at the hypervisor level—easier to manage than iptables and harder to misconfigure. Contabo and OVHcloud require manual iptables or third-party firewalls.
DDoS protection varies. Cloudflare in front of your VPS is the practical answer regardless of provider. Hetzner includes basic volumetric protection; Vultr offers paid DDoS add-ons. AWS Lightsail sits behind AWS Shield Standard, which handles common attacks.
Backup pricing and automation differ widely. DigitalOcean charges 20% of the instance cost for automated weekly snapshots. Hetzner includes one snapshot slot free, then charges per additional snapshot. Contabo and OVHcloud charge separately for backup services. UpCloud offers automated backups as a paid add-on. Linode's backup service is similar to DigitalOcean's.
For production, use external backup tooling (restic, borgbackup) to object storage—you're not locked to the provider, and it's often cheaper.
Price-performance: who wins?
Hetzner delivered the best price-performance ratio. Fast CPUs, solid NVMe I/O, huge bandwidth allowance, and low monthly cost. If you're in the EU or don't need premium US support, it's hard to beat.
UpCloud posted the strongest absolute numbers but at a higher price point—worth it if performance predictability justifies the cost. For high-traffic WordPress, WooCommerce, or API backends, that premium pays off.
DigitalOcean and Linode occupy the reliable middle: not the fastest, not the cheapest, but consistent and well-documented. Good developer experience, stable APIs, and predictable performance. You pay a bit more for that polish.
Vultr offers comparable specs to DO and Linode at slightly lower prices. The kernel latency issue we hit is fixable, and overall performance was solid.
Contabo wins if price is your only concern and you can tolerate variable performance. For dev environments or low-traffic sites, it's usable. For production, think twice.
AWS Lightsail makes sense if you're already in the AWS ecosystem and can manage burst credit limits. Otherwise, the burstable model adds complexity without clear benefit over fixed-performance competitors.
OVHcloud and Kamatera fell into the "fine but not outstanding" category—neither stood out positively or negatively enough to recommend over the leaders.
How to validate performance yourself
Don't trust anyone's benchmarks forever. Providers adjust hardware, oversell capacity, and migrate workloads. Validate performance when you provision a new instance:
# Install sysbench
apt update && apt install -y sysbench
# CPU test, single-threaded
sysbench cpu --threads=1 --time=60 run
# CPU test, multi-threaded
sysbench cpu --threads=2 --time=60 run
For disk I/O:
# Install fio
apt install -y fio
# Random read test
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=1 --size=2G --runtime=60 --time_based
# Random write test
fio --name=randwrite --ioengine=libaio --iodepth=16 --rw=randwrite --bs=4k --direct=1 --size=2G --runtime=60 --time_based
Network:
# Install iperf3
apt install -y iperf3
# Test to a public iperf3 server (many are listed online)
iperf3 -c iperf.he.net -t 30
Run these tests immediately after provisioning. If numbers fall far short of provider claims or our results, open a support ticket. Sometimes you land on aging hardware or an oversold node; good hosts will migrate you.
Repeat tests monthly. Performance drift is common.
Does location matter more than provider?
For latency-sensitive apps, yes. A mediocre VPS close to your users beats a fast one two continents away. But once you've picked the right region, provider differences become visible.
In our tests, Hetzner Frankfurt and UpCloud Frankfurt performed identically for EU users. DigitalOcean New York and Linode New York showed minimal difference for US East traffic. The gap widened under sustained load—that's when resource allocation and noisy neighbors matter.
If you serve global traffic, use multiple regions or a CDN. No single VPS location handles worldwide latency well. For regional apps (SaaS serving US customers, for instance), pick the provider with the best performance metrics in your target region.
Which host to pick for your workload
Hetzner makes sense for most hosting workloads where price-performance is the deciding factor—WordPress, small e-commerce, development environments. EU data residency is a bonus for GDPR-sensitive projects.
UpCloud suits production apps where predictable performance justifies higher cost: API backends, SaaS platforms, and busy WooCommerce stores. Their disk I/O consistency stands out.
DigitalOcean or Linode fit teams that value ecosystem and developer experience over raw speed. Extensive documentation, mature APIs, and reliable support mean fewer surprises. If you're managing multiple clients or learning VPS administration, the smoother onboarding is worth the modest performance tradeoff.
Vultr offers a middle path: competitive performance at slightly lower prices than DO/Linode. The kernel tweak we mentioned is a one-time fix.
AWS Lightsail belongs in architectures already using AWS services (RDS, S3, Lambda). Standalone, it's hard to recommend over fixed-performance competitors.
Skip Contabo for production unless budget is genuinely the only constraint. For staging or personal projects, it's acceptable.
Test your workload on a few finalists before committing. Most providers offer hourly billing; spin up instances, run your app, and measure. Real-world behavior trumps benchmarks every time.
