How to Benchmark Your Server: Step by Step

CPU with sysbench, memory with memtester, storage with fio, network with iperf3. Real numbers — not feelings.
Why Benchmark Your Server?
Before choosing a hosting provider or upgrading server specifications, you need real numbers. Benchmarking gives you objective answers: Does this server suit my application? Is the upgrade worth the cost? How does it compare to other servers?
This guide covers standard measurement tools and how to interpret the results.
CPU Performance Benchmarking
Sysbench
# Install sysbench
apt install sysbench -y
# Single-thread CPU test
sysbench cpu --threads=1 run
# Multi-threaded test (equal to number of vCPUs)
sysbench cpu --threads=4 run
Example of a good result:
CPU speed:
events per second: 2500+ ← good value for a single vCPU
UnixBench
# Install UnixBench
apt install git make gcc -y
git clone https://github.com/nicowillis/unixbench.git
cd unixbench && ./Run
# Provides comprehensive scores for all performance aspects
Memory (RAM) Performance Benchmarking
# sysbench memory test
sysbench memory --memory-total-size=10G run
# Good result: > 10 GB/sec for reads
# Alternative test with dd
dd if=/dev/zero of=/dev/null bs=1M count=10240 2>&1 | tail -1
Disk (SSD) Performance Benchmarking
Sequential Read Test
# fio - the standard tool for disk performance measurement
apt install fio -y
# Sequential read
fio --name=seq-read \
--rw=read \
--bs=1M \
--size=4G \
--numjobs=1 \
--runtime=60 \
--group_reporting
# Sequential write
fio --name=seq-write \
--rw=write \
--bs=1M \
--size=4G \
--numjobs=1 \
--runtime=60 \
--group_reporting
Random Read Test (Most Important for Databases)
# Random IOPS - most important for databases
fio --name=rand-read \
--rw=randread \
--bs=4k \
--size=4G \
--numjobs=4 \
--runtime=60 \
--group_reporting \
--iodepth=32
Reference Benchmarks
| Disk Type | Sequential Read | Sequential Write | Random IOPS |
|---|---|---|---|
| SATA SSD | 500-550 MB/s | 400-500 MB/s | 70K-100K |
| NVMe SSD | 2,000-7,000 MB/s | 1,000-5,000 MB/s | 300K-1M |
| HDD | 100-200 MB/s | 80-150 MB/s | 100-200 |
Network Performance Benchmarking
# Install iperf3
apt install iperf3 -y
# On the test server (server mode)
iperf3 -s
# On your server (client mode)
iperf3 -c server-ip -t 30
# Internet speed test
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3
# Ping test for your region
ping -c 20 riyadh-server-ip
Latency Test to cloud.net.sa Data Centers
# Latency to Riyadh and Jeddah (from within Saudi Arabia)
ping -c 20 cloud.net.sa
# traceroute to understand network path
traceroute cloud.net.sa
mtr cloud.net.sa # Better than traceroute
cloud.net.sa servers in Riyadh and Jeddah achieve latency very low latency for most Saudi users.
Web Performance (HTTP Load Testing)
Apache Bench (ab)
# Install
apt install apache2-utils -y
# 1000 requests, 100 concurrent
ab -n 1000 -c 100 https://yoursite.com/
# With custom headers
ab -n 1000 -c 100 -H "Accept-Encoding: gzip" https://yoursite.com/api/data
wrk (More Powerful Than ab)
# Install
apt install wrk -y
# 30 seconds, 12 threads, 400 concurrent connections
wrk -t12 -c400 -d30s https://yoursite.com/
# With Lua script for POST requests
wrk -t12 -c400 -d30s -s post.lua https://yoursite.com/api
k6 (Most Modern and Powerful)
// load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 }, // ramp-up
{ duration: '5m', target: 100 }, // stay at 100
{ duration: '2m', target: 0 }, // ramp-down
],
};
export default function {
const res = http.get('https://yoursite.com/');
check(res, { 'status was 200': (r) => r.status === 200 });
sleep(1);
}
k6 run load-test.js
Interpreting Results
Key HTTP Metrics
| Metric | Excellent | Good | Needs Improvement |
|---|---|---|---|
| P50 Latency | < 50ms | < 100ms | > 200ms |
| P95 Latency | < 200ms | < 500ms | > 1s |
| P99 Latency | < 500ms | < 1s | > 2s |
| Requests/sec | > 1000 | > 500 | < 100 |
| Error Rate | 0% | < 0.1% | > 1% |
Comprehensive Benchmark Script
#!/bin/bash
# cloud-benchmark.sh - comprehensive server benchmark
echo "=== CPU Benchmark ==="
sysbench cpu --threads=$(nproc) run 2>&1 | grep "events per second"
echo ""
echo "=== Memory Benchmark ==="
sysbench memory --memory-total-size=5G run 2>&1 | grep "transferred"
echo ""
echo "=== Disk Sequential Write ==="
dd if=/dev/zero of=/tmp/testfile bs=1G count=2 2>&1 | tail -1
echo ""
echo "=== Disk Sequential Read ==="
dd if=/tmp/testfile of=/dev/null bs=1G 2>&1 | tail -1
rm /tmp/testfile
echo ""
echo "=== Network Latency ==="
ping -c 10 8.8.8.8 | tail -2
chmod +x cloud-benchmark.sh
./cloud-benchmark.sh
Summary
Systematic measurement gives you facts instead of guesses. Before complaining about server slowness, run these tests and identify where the actual bottleneck is. In most cases, the problem is not in the server — it is in the code or database. On cloud.net.sa, performance is documented and measurable.
Get Started
Want to try it yourself? Choose the right hosting plan or build your custom server with the specs you need.
