Guides

How to Test Your Hosting Speed: Tools, Methods, and What Numbers Matter

A practical guide to benchmarking your hosting provider. Which tools to use, what metrics matter, and how to interpret the results without getting lost in numbers.

Why Benchmark Your Hosting

Hosting providers publish specs: "2 vCPU, 4GB RAM, 80GB NVMe." These numbers are useful but incomplete. Two servers with identical specs can perform very differently depending on:

  • CPU type and generation (Intel Xeon v2 from 2014 vs AMD EPYC from 2023)
  • Storage configuration (single NVMe drive vs RAID 10 array)
  • Network infrastructure (1 Gbps port on a 10 Gbps oversubscribed link)
  • Virtualisation overhead (CPU steal on oversold hosts)
  • Neighbour activity (noisy neighbours on shared infrastructure)

Benchmarking reveals what you're actually getting, not what the spec sheet says.

What to Test

A complete hosting benchmark covers:

1. CPU performance โ€” Single and multi-core processing power 2. Memory performance โ€” Read/write speed and latency 3. Disk I/O performance โ€” Sequential and random read/write speeds 4. Network performance โ€” Throughput, latency, and consistency 5. Application performance โ€” How your actual software performs

CPU Benchmark

Using sysbench

# Install sysbench
apt install sysbench

# Single-thread CPU test sysbench cpu --cpu-max-prime=20000 --threads=1 run

# Multi-thread CPU test (adjust to your vCPU count) sysbench cpu --cpu-max-prime=20000 --threads=4 run

Look for the "total time" and "events per second" values. Lower time / higher events per second = faster CPU.

Using Geekbench (more comprehensive)

# Download Geekbench 6
wget https://cdn.geekbench.com/Geekbench-6.3.0-Linux.tar.gz
tar xzf Geekbench-6.3.0-Linux.tar.gz
cd Geekbench-6.3.0-Linux
./geekbench6

Geekbench provides standardised scores that can be compared across providers. Single-core scores matter for most web workloads (PHP, Python, Node.js are single-threaded per request).

What numbers matter

CPU ScoreInterpretation
Single-core < 800Older/slower hardware, adequate for light workloads
Single-core 800-1200Standard VPS performance
Single-core 1200-1800Good VPS performance (modern CPU)
Single-core > 1800Excellent โ€” dedicated server territory

Check for CPU steal

CPU steal is time your VPS wants to run but the hypervisor is busy with another VM. It's the clearest indicator of an oversold host.

# Check CPU steal percentage
top -bn1 | grep "Cpu(s)" | awk '{print $10}'
# Or
vmstat 1 5
# Look at the 'st' column

Steal should be <1% under normal load. Steal >5% indicates the host is oversold. Steal >10% is a problem โ€” your performance will be inconsistent.

Memory Benchmark

# Install sysbench if not already installed
apt install sysbench

# Memory read test sysbench memory --memory-block-size=1K --memory-total-size=10G run

# Memory write test sysbench memory --memory-block-size=1K --memory-total-size=10G --memory-oper=write run

Look for "transferred" (MiB/sec). For reference:

  • < 5,000 MiB/s: Slow (older DDR3 or shared/contended)
  • 5,000-10,000 MiB/s: Standard VPS
  • 10,000-20,000 MiB/s: Good (DDR4)
  • > 20,000 MiB/s: Excellent (DDR4/DDR5, dedicated)

Also check available RAM vs. advertised RAM:

free -h

Some hosts report total RAM including what the OS and virtualisation layer consume. If you paid for 2GB but free -h shows 1.7GB, that's normal. If it shows 1.2GB, something is consuming too much overhead.

Disk I/O Benchmark

This is the most important benchmark for most workloads. Disk I/O affects database performance, page load times, and file operations.

Sequential Read/Write (large files)

# Write test
dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct 2>&1 | grep copied

# Read test (clear cache first) echo 3 > /proc/sys/vm/drop_caches dd if=/tmp/test of=/dev/null bs=1M count=1024 2>&1 | grep copied

# Clean up rm /tmp/test

Random Read/Write with fio

# Install fio
apt install fio

# Random read (4k blocks โ€” simulates database I/O) fio --name=randread --ioengine=libaio --iodepth=32 --rw=randread \ --bs=4k --size=1G --numjobs=4 --runtime=30 --time_based \ --group_reporting

# Random write (4k blocks) fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite \ --bs=4k --size=1G --numjobs=4 --runtime=30 --time_based \ --group_reporting

# Sequential read (1M blocks โ€” simulates large file transfer) fio --name=seqread --ioengine=libaio --iodepth=32 --rw=read \ --bs=1M --size=2G --numjobs=1 --runtime=30 --time_based \ --group_reporting

What the numbers mean

Storage TypeSequential ReadRandom Read (4K)
HDD (mechanical)80-160 MB/s0.5-1.5 MB/s (100-300 IOPS)
SATA SSD400-550 MB/s15-30 MB/s (3,000-8,000 IOPS)
NVMe (entry)1,000-2,000 MB/s50-100 MB/s (12,000-25,000 IOPS)
NVMe (performance)2,500-3,500 MB/s100-250 MB/s (25,000-60,000 IOPS)
NVMe RAID4,000-7,000 MB/s200-500 MB/s (50,000-125,000 IOPS)

For web hosting, random read/write performance (IOPS) matters most โ€” databases do lots of small random reads. Sequential throughput matters for large file operations (backups, media serving).

Network Benchmark

Speed Test

# Simple speed test
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3 -

# Or use iperf3 against a public server # Install: apt install iperf3 iperf3 -c iperf.he.net -p 5201 -t 10

Latency to Major Points

# Test latency to various locations
ping -c 5 8.8.8.8          # Google DNS
ping -c 5 1.1.1.1          # Cloudflare DNS
ping -c 5 your-users-location-server

Throughput Consistency

Network throughput that varies wildly suggests an oversubscribed link:

# Download a test file, watching speed
wget -O /dev/null http://speedtest.tele2.net/100MB.zip

What number matters

Network speed isn't just about peak throughput โ€” it's about consistency and congestion. A 1Gbps port that drops to 50Mbps during peak hours is worse than a 500Mbps port that's consistently 500Mbps.

Application Benchmark

The most useful benchmark: test your actual application.

WordPress Performance Test

# Install Apache Benchmark
apt install apache2-utils

# Test the homepage (uncached) ab -n 100 -c 10 https://yourdomain.com/

# Look for: # "Requests per second" โ€” higher is better # "Time per request" (mean) โ€” lower is better # "Failed requests" โ€” should be 0

PHP Execution Speed

# Create test script
cat > /var/www/html/phpinfo.php << 'EOF'

# Run php /var/www/html/phpinfo.php rm /var/www/html/phpinfo.php

All-in-One Benchmark Script

#!/bin/bash
# Save as benchmark.sh and run: bash benchmark.sh

echo "=== CPU Info ===" lscpu | grep "Model name\|CPU(s)\|Thread\|Core"

echo -e "\n=== Memory ===" free -h

echo -e "\n=== Disk ===" df -h / echo "" dd if=/dev/zero of=/tmp/bench bs=1M count=512 oflag=direct 2>&1 | grep copied echo 3 > /proc/sys/vm/drop_caches 2>/dev/null dd if=/tmp/bench of=/dev/null bs=1M count=512 2>&1 | grep copied rm /tmp/bench

echo -e "\n=== Network (100MB test file) ===" wget -O /dev/null http://speedtest.tele2.net/100MB.zip 2>&1 | tail -1

echo -e "\n=== CPU Steal (5 samples) ===" vmstat 1 5 | tail -5

echo -e "\n=== Latency ===" ping -c 3 8.8.8.8 | tail -1

How to Interpret Results

Your hosting is good if:

  • Disk random read > 30 MB/s (>8,000 IOPS)
  • Network sustained > 200 Mbps
  • CPU steal < 1%
  • Sequential disk read > 500 MB/s
  • PHP execution < 200ms (simple operation)

Your hosting is adequate if:

  • Disk random read 15-30 MB/s (4,000-8,000 IOPS)
  • Network sustained 100-200 Mbps
  • CPU steal 1-5%
  • Sequential disk read 200-500 MB/s

Your hosting is underperforming if:

  • Disk random read < 15 MB/s (<4,000 IOPS)
  • Network sustained < 100 Mbps
  • CPU steal > 5%
  • Sequential disk read < 200 MB/s
  • Consider switching hosts if you're consistently in the "underperforming" range and the host's spec sheet promises more. The gap between advertised specs and actual performance is a signal about the host's infrastructure quality.

    When to Benchmark

  • Immediately after provisioning โ€” Verify you're getting what you paid for
  • After major changes โ€” OS updates, kernel changes, control panel installations
  • When performance feels slow โ€” Before troubleshooting, confirm the server is the bottleneck
  • When evaluating new hosts โ€” Run identical benchmarks on multiple providers to compare
  • Periodically (quarterly) โ€” Performance can degrade over time as hosts oversubscribe

The Tool That Replaces All of This

[yabs.sh](https://github.com/masonr/yet-another-bench-script) (Yet Another Benchmark Script) runs a comprehensive benchmark in one command:

curl -sL yabs.sh | bash

It tests CPU, memory, disk I/O, and network, then generates a shareable report. This is what most of the hosting community uses for quick comparisons. Run it on any new server to get a baseline.

Remember: benchmarks are snapshots. A server that performs well at 3am might perform differently at 3pm when your neighbours on the host are active. Run benchmarks at different times to get a complete picture.

Rather than DIY? Let OpsHelp handle everything.

Managed hosting with support, security, backups, and monitoring โ€” from ยฃ50/mo.

Get Managed Hosting โ†’

Need help with your server setup?

OpsHelp provides professional server management, setup, and hardening services.

Get Help from OpsHelp โ†’