Sunucu seçimi için Linux test betiği: kiraladığınız VPS'in CPU, disk ve ağ performansını deneme süresinde ölçme
Sunucu seçimi için kâğıt üstü özellikler yetmez. sysbench, fio, ioping ve iperf3 sonuçlarını tek rapor ve CSV özetinde toplayan bash betiğini deneme süresinde çalıştırın. CPU steal, 4K IOPS, gecikme ve TL başına performansla sağlayıcıları aynı ölçütle karşılaştırın.
Batuhan Çelikel14 dk okuma
İki sağlayıcının teklifinde aynı şey yazıyor olabilir: "4 vCPU, 8 GB RAM, NVMe disk, 1 Gbit port". Gerçek performans ise birbirinden çok farklı çıkabilir. Bu rehber, sunucu seçimi yaparken deneme süresi içinde CPU, bellek, disk ve ağ performansını ölçen bir bash betiği veriyor. Betik sonuçları okunur bir raporda ve karşılaştırmaya hazır bir CSV dosyasında topluyor. Hedef okur, VPS ya da bulut sunucu kiralamadan önce teklifleri sayılarla karşılaştırmak isteyen sistem yöneticisi ve KOBİ sahibi.
Sunucu seçiminde kâğıt üstü özellik neden yetmez
Teklif sayfasındaki üç terim, ölçmeden bakıldığında yanıltıcı olabilir:
- vCPU: Bir vCPU, fiziksel bir çekirdeğin tamamı da olabilir, aynı çekirdeği başka sanal makinelerle paylaşan bir iş parçacığı da. İşlemci nesli ve saat hızı da tek çekirdek performansını belirler. Logo, Mikro gibi programlar ve PHP siteleri büyük ölçüde tek çekirdek hızına bağlıdır.
- NVMe: Diskin NVMe olması, sanal makineye ulaşan IOPS değerinin yüksek olacağı anlamına gelmez. Sağlayıcı sanal disk başına IOPS ve bant genişliği sınırı koyabilir, depolama ağ üzerinden de gelebilir.
- Port hızı: "1 Gbit port" fiziksel bağlantının hızıdır. Size ayrılan bant genişliği, operatör bağlantıları ve Türkiye'deki kullanıcılarınıza olan gecikme ayrı konulardır.
Bu yüzden karar, aynı betiği her adayda aynı ayarlarla çalıştırıp çıkan sayıları karşılaştırarak verilmeli. Fiyat kalemlerini nasıl ayıracağınızı bulut sunucu fiyatlarını karşılaştırma rehberinde ayrıntılı anlattık. Bu yazı ise ölçüm tarafını kapsıyor.
Test betiği neleri ölçer
Betik sırasıyla şu ölçümleri yapar:
| Alan | Araç | Ne söyler |
|---|---|---|
| Tek çekirdek CPU | sysbench cpu, 1 iş parçacığı | Tek iş parçacıklı uygulamaların hızı |
| Çok çekirdek CPU | sysbench cpu, tüm vCPU'lar | Paralel işlerde toplam kapasite |
| CPU steal | /proc/stat, yük altında | Hipervizörün size ait CPU zamanını başka makinelere verip vermediği |
| Bellek bant genişliği | sysbench memory | RAM'e yazma hızı |
| 4K rastgele okuma ve yazma | fio, direct=1, iodepth=32 | Veritabanı benzeri yükte IOPS ve p99 gecikme |
| Sıralı okuma ve yazma | fio, 1M blok | Yedek, dosya kopyalama hızı |
| Tek istek gecikmesi | ioping | Diskin tek bir isteğe yanıt süresi |
| Ağ bant genişliği | iperf3, iki yön | Kendi kontrolünüzdeki bir uca gerçek aktarım hızı |
| Ağ gecikmesi | ping | Ofisinize ya da kullanıcılarınıza olan gecikme ve paket kaybı |
Araçların parametre ayrıntıları için kurulumdan sonra sunucuda man fio, sysbench --help ve man iperf3 çıktılarına bakabilirsiniz. Böylece okuduğunuz belge, kurulu sürümle birebir uyuşur.
Ön koşullar ve paket kurulumu
Betik gerekli paketleri kendisi kurar, ama ne kurduğunu bilmek önemlidir:
- Ubuntu ve Debian:
sysbench,fio,iperf3,iopingvejqpaketlerinin hepsi resmi depolarda bulunur. - Rocky Linux ve AlmaLinux:
fio,iperf3vejqtemel depolardadır.sysbenchveiopingise EPEL deposundan gelir. Betikepel-releasepaketini kurmayı dener. Red Hat Enterprise Linux kullanıyorsanız EPEL'i EPEL repo kurulum rehberindeki adımlarla elle etkinleştirin.
Başlamadan önce şunları kontrol edin:
- sudo yetkisi: Paket kurulumu için gerekir. Testlerin kendisi root istemez.
- Boş disk alanı: Test dosyası varsayılan olarak 4 GB'tır. Betik, en az 6 GB boş alan yoksa durur.
- Sağlayıcının kullanım koşulları: Bazı sağlayıcılar sürekli tam yükü sözleşmede sınırlar. Betik toplamda yaklaşık 7 ile 8 dakika yük üretir. Bu çoğu durumda sorun olmaz, yine de deneme koşullarını okuyun.
- Boş sunucu: Testi, üzerinde canlı iş yükü olmayan yeni sunucuda çalıştırın. Aksi halde ölçtüğünüz şey kendi uygulamanızın yükü olur.
Test betiği: sunucu-test.sh
Aşağıdaki betik Ubuntu 22.04, Ubuntu 24.04, Debian 12, Rocky Linux 9 ve AlmaLinux 9 için hazırlandı. Yaptığı işler: eksik paketleri kurar, sistem bilgisini kaydeder, CPU, bellek, disk ve ağ testlerini çalıştırır, sonuçları zaman damgalı bir rapora ve ortak bir ozet.csv dosyasına yazar. Tekrar tekrar çalıştırılabilir: her çalıştırma yeni bir rapor dosyası oluşturur ve CSV'ye bir satır ekler. Diske yazdığı tek büyük dosya fio-test.dat dosyasıdır ve betik nasıl biterse bitsin bu dosyayı siler.
ORNEK_SAGLAYICI, AYLIK_TL, IPERF_SUNUCU ve PING_HEDEFLER değerlerini kendi durumunuza göre ortam değişkeniyle verin.
#!/usr/bin/env bash
# sunucu-test.sh: CPU, bellek, disk ve ağ ölçümlerini tek rapora ve CSV özetine toplar.
# Ubuntu 22.04/24.04, Debian 12, Rocky Linux 9 ve AlmaLinux 9 için hazırlandı.
set -euo pipefail
export LC_ALL=C # lscpu ve awk çıktısı dilden bağımsız olsun, ondalık ayırıcı nokta kalsın
# ---- Ayarlar: ortam değişkeniyle değiştirilebilir ----
TEST_DIZINI="${TEST_DIZINI:-/var/tmp/sunucu-test}" # fio dosyası; ölçülecek diskte olmalı
FIO_BOYUT_GB="${FIO_BOYUT_GB:-4}" # test dosyası boyutu (GB)
FIO_SURE="${FIO_SURE:-60}" # her fio testinin süresi (sn)
CPU_SURE="${CPU_SURE:-30}" # her sysbench CPU testinin süresi (sn)
IPERF_SUNUCU="${IPERF_SUNUCU:-}" # iperf3 -s çalışan karşı uç, ör. 192.0.2.10
PING_HEDEFLER="${PING_HEDEFLER:-}" # boşlukla ayrılmış hedefler, ör. "198.51.100.20 example.com"
SAGLAYICI="${SAGLAYICI:-ORNEK_SAGLAYICI}" # raporda ve CSV'de görünecek etiket
AYLIK_TL="${AYLIK_TL:-0}" # paketin KDV dahil aylık bedeli (TL)
RAPOR_DIZINI="${RAPOR_DIZINI:-$HOME/sunucu-test-raporlari}"
ZAMAN="$(date +%Y%m%d-%H%M%S)"
mkdir -p "$TEST_DIZINI" "$RAPOR_DIZINI"
RAPOR="$RAPOR_DIZINI/${SAGLAYICI}-$(hostname -s)-${ZAMAN}.txt"
OZET_CSV="$RAPOR_DIZINI/ozet.csv"
FIO_DOSYA="$TEST_DIZINI/fio-test.dat"
SUDO=""
[ "$(id -u)" -ne 0 ] && SUDO="sudo"
# Betik hata ile de bitse yalnız kendi test dosyasını siler
temizle() { rm -f -- "$FIO_DOSYA"; }
trap temizle EXIT
log() { echo "$*" | tee -a "$RAPOR"; }
# ---- 1. Eksik paketleri kur (kuruluysa dokunmaz) ----
paket_kur() {
local eksik=() k
for k in sysbench fio iperf3 ioping jq; do
command -v "$k" >/dev/null 2>&1 || eksik+=("$k")
done
[ ${#eksik[@]} -eq 0 ] && return 0
echo "Eksik paketler kuruluyor: ${eksik[*]}"
if command -v apt-get >/dev/null 2>&1; then
$SUDO apt-get update -qq
$SUDO env DEBIAN_FRONTEND=noninteractive apt-get install -y -qq "${eksik[@]}"
elif command -v dnf >/dev/null 2>&1; then
# sysbench ve ioping EPEL deposundadır
if ! rpm -q epel-release >/dev/null 2>&1; then
$SUDO dnf install -y epel-release || echo "UYARI: epel-release kurulamadı, EPEL'i elle etkinleştirin."
fi
$SUDO dnf install -y "${eksik[@]}"
else
echo "Desteklenmeyen paket yöneticisi." >&2
exit 1
fi
}
paket_kur
# ---- 2. Boş alan kontrolü ----
BOS_GB=$(df -P -BG "$TEST_DIZINI" | awk 'NR==2 {gsub("G","",$4); print $4}')
if [ "$BOS_GB" -lt $((FIO_BOYUT_GB + 2)) ]; then
echo "Yetersiz alan: $TEST_DIZINI içinde ${BOS_GB} GB boş, en az $((FIO_BOYUT_GB + 2)) GB gerekli." >&2
exit 1
fi
# ---- 3. Sistem bilgisi ----
log "=== Sunucu test raporu: $SAGLAYICI / $(hostname -s) / $ZAMAN ==="
log "CPU modeli : $(lscpu | awk -F: '/^Model name/ {gsub(/^ +/,"",$2); print $2; exit}')"
log "vCPU : $(nproc)"
log "Bellek : $(free -m | awk '/^Mem:/ {print $2}') MiB"
log "Sanallaştırma : $(systemd-detect-virt 2>/dev/null || true)"
log "Çekirdek : $(uname -r)"
log "Araç sürümleri : $(sysbench --version), $(fio --version), $(iperf3 --version | head -n1)"
log ""
# ---- 4. CPU: tek çekirdek, çok çekirdek ve yük altında steal ----
cpu_oku() { awk '/^cpu / {print $2+$3+$4+$5+$6+$7+$8+$9, $9}' /proc/stat; } # toplam, steal
TEK=$(sysbench cpu --cpu-max-prime=20000 --threads=1 --time="$CPU_SURE" run | awk '/events per second/ {print $4}')
read -r T1 S1 < <(cpu_oku)
COK=$(sysbench cpu --cpu-max-prime=20000 --threads="$(nproc)" --time="$CPU_SURE" run | awk '/events per second/ {print $4}')
read -r T2 S2 < <(cpu_oku)
STEAL=$(awk -v s=$((S2 - S1)) -v t=$((T2 - T1)) 'BEGIN { if (t > 0) printf "%.2f", s * 100 / t; else print "0" }')
log "[CPU] tek çekirdek (olay/sn) : $TEK"
log "[CPU] çok çekirdek (olay/sn): $COK"
log "[CPU] yük altında steal (%) : $STEAL"
# ---- 5. Bellek ----
BELLEK=$(sysbench memory --memory-block-size=1M --memory-total-size=100G --threads=1 --time=15 run \
| awk -F'[()]' '/MiB\/sec/ {print $2}' | awk '{print $1}')
log "[RAM] bellek yazma (MiB/sn) : $BELLEK"
# ---- 6. Disk: fio (önbelleği atlayan direct=1) ve ioping ----
fio_calistir() { # $1 ad, $2 rw türü, $3 blok boyutu, $4 kuyruk derinliği
fio --name="$1" --filename="$FIO_DOSYA" --size="${FIO_BOYUT_GB}G" \
--rw="$2" --bs="$3" --iodepth="$4" --numjobs=1 --ioengine=libaio \
--direct=1 --time_based --runtime="$FIO_SURE" --ramp_time=5 \
--group_reporting --output-format=json
}
J=$(fio_calistir sirali-yazma write 1M 8)
SEQ_W=$(jq -r '.jobs[0].write.bw / 1024 | floor' <<<"$J")
J=$(fio_calistir sirali-okuma read 1M 8)
SEQ_R=$(jq -r '.jobs[0].read.bw / 1024 | floor' <<<"$J")
J=$(fio_calistir rastgele-okuma randread 4k 32)
RR_IOPS=$(jq -r '.jobs[0].read.iops | floor' <<<"$J")
RR_P99=$(jq -r '.jobs[0].read.clat_ns.percentile["99.000000"] / 1000 | floor' <<<"$J")
J=$(fio_calistir rastgele-yazma randwrite 4k 32)
RW_IOPS=$(jq -r '.jobs[0].write.iops | floor' <<<"$J")
IOPING=$(ioping -c 20 -D -q "$TEST_DIZINI" 2>&1 | tail -n 1)
log "[DISK] sıralı yazma (MiB/sn) : $SEQ_W"
log "[DISK] sıralı okuma (MiB/sn) : $SEQ_R"
log "[DISK] 4K rastgele okuma IOPS : $RR_IOPS (p99: ${RR_P99} µs)"
log "[DISK] 4K rastgele yazma IOPS : $RW_IOPS"
log "[DISK] ioping tek istek gecikmesi: $IOPING"
# ---- 7. Ağ: iperf3 iki yön ----
GONDER="-"; AL="-"
if [ -n "$IPERF_SUNUCU" ]; then
if J=$(iperf3 -c "$IPERF_SUNUCU" -t 10 -P 4 -J); then
GONDER=$(jq -r '.end.sum_received.bits_per_second / 1e6 | floor' <<<"$J")
log "[AĞ] iperf3 gönderme (Mbit/sn): $GONDER (yeniden gönderim: $(jq -r '.end.sum_sent.retransmits' <<<"$J"))"
else
log "[AĞ] iperf3 gönderme: bağlantı kurulamadı ($IPERF_SUNUCU:5201)"
fi
if J=$(iperf3 -c "$IPERF_SUNUCU" -t 10 -P 4 -R -J); then
AL=$(jq -r '.end.sum_received.bits_per_second / 1e6 | floor' <<<"$J")
log "[AĞ] iperf3 alma (Mbit/sn) : $AL"
else
log "[AĞ] iperf3 alma: bağlantı kurulamadı"
fi
else
log "[AĞ] iperf3 atlandı: IPERF_SUNUCU tanımlı değil"
fi
# ---- 8. Ağ: gecikme ve paket kaybı ----
for H in $PING_HEDEFLER; do
P=$(ping -c 20 -i 0.5 -q "$H" 2>&1 | tail -n 2 | tr '\n' ' ') || P="ulaşılamadı"
log "[PING] $H: $P"
done
# ---- 9. CSV özeti (karşılaştırma için) ----
if [ ! -f "$OZET_CSV" ]; then
echo "tarih,saglayici,sunucu,vcpu,tek_cekirdek,cok_cekirdek,steal_yuzde,bellek_mib_s,rr_iops,rw_iops,rr_p99_us,seq_okuma_mib,seq_yazma_mib,iperf_gonder_mbit,iperf_al_mbit,aylik_tl" > "$OZET_CSV"
fi
echo "$ZAMAN,$SAGLAYICI,$(hostname -s),$(nproc),$TEK,$COK,$STEAL,$BELLEK,$RR_IOPS,$RW_IOPS,$RR_P99,$SEQ_R,$SEQ_W,$GONDER,$AL,$AYLIK_TL" >> "$OZET_CSV"
log ""
log "Rapor: $RAPOR"
log "Özet : $OZET_CSV"
Çalıştırma
Betiği sunucuya kopyalayın ve değerleri vererek çalıştırın. Aşağıdaki adres ve tutar yalnızca örnektir:
chmod +x sunucu-test.sh
SAGLAYICI=firma-a AYLIK_TL=1500 \
IPERF_SUNUCU=192.0.2.10 \
PING_HEDEFLER="198.51.100.20 example.com" \
./sunucu-test.sh
Beklenen rapor yapısı şöyledir. Sayılar sunucuya göre değişir:
=== Sunucu test raporu: firma-a / test01 / 20261106-101500 ===
CPU modeli : <işlemci adı>
vCPU : 4
[CPU] tek çekirdek (olay/sn) : <sayı>
[CPU] yük altında steal (%) : <yüzde>
[DISK] 4K rastgele okuma IOPS : <sayı> (p99: <sayı> µs)
[AĞ] iperf3 gönderme (Mbit/sn): <sayı> (yeniden gönderim: <sayı>)
[PING] 198.51.100.20: 20 packets transmitted, 20 received, 0% packet loss ... rtt min/avg/max/mdev = ...
Geri alma: Betik sistem ayarına dokunmaz. Kaldırmak isterseniz rapor dizinini (~/sunucu-test-raporlari) yedekledikten sonra silebilir, /var/tmp/sunucu-test dizinini rmdir ile kaldırabilir, kurulan paketleri sudo apt remove sysbench fio iperf3 ioping ya da sudo dnf remove sysbench fio iperf3 ioping ile kaldırabilirsiniz. jq paketini başka bir iş kullanıyorsa kaldırmayın.
iperf3 için karşı uç hazırlama
iperf3'ün ölçebilmesi için kontrolünüzdeki ikinci bir makinede sunucu kipinin açık olması gerekir. Bu makine ofisinizdeki bir Linux makinesi ya da zaten kullandığınız başka bir sunucu olabilir. Herkese açık iperf3 sunucuları çoğu zaman meşgul olur ve tutarlı sonuç vermez.
Uyarı: Aşağıdaki güvenlik duvarı komutlarından önce ufw'de SSH erişimine izin verildiğinden emin olun (sudo ufw status çıktısında 22/tcp ya da OpenSSH görünmeli). ufw ilk kez etkinleştiriliyorsa ve SSH izni yoksa sunucuya erişiminizi kaybedersiniz. Böyle bir durumda sağlayıcının web konsolu tek çıkış yolu olur, işe başlamadan konsola erişebildiğinizi doğrulayın.
Karşı uçta, Ubuntu ve ufw için hazırlandı. 203.0.113.5 yerine test ettiğiniz VPS'in adresini yazın:
# SSH izninin var olduğunu kontrol edin
sudo ufw status | grep -E '22|OpenSSH'
# 5201 portunu yalnız test edilen VPS'e açın
sudo ufw allow from 203.0.113.5 to any port 5201 proto tcp
# iperf3'ü sunucu kipinde başlatın (test bitince kendiliğinden kapanmaz, Ctrl+C ile durdurun)
iperf3 -s
# Test bittikten sonra kuralı geri alın
sudo ufw delete allow from 203.0.113.5 to any port 5201 proto tcp
Sonuçları yorumlama
Tek bir sayıya bakıp "iyi" ya da "kötü" demek zordur. Değerler, iki aday arasında ve aynı adayın farklı saatlerdeki ölçümleri arasında karşılaştırıldığında anlam kazanır.
Tek ve çok çekirdek puanı
sysbench CPU puanı sürüme ve derleme seçeneklerine göre değişebilir. Betik bu yüzden sürümü rapora yazar. Yalnız aynı sysbench sürümüyle alınmış sonuçları karşılaştırın. Ana iş yükünüz tek iş parçacıklıysa (ERP istemcisi, PHP, tek sorgulu raporlar) tek çekirdek puanı belirleyicidir. Çok çekirdek puanı ise yaklaşık olarak tek çekirdek puanı ile vCPU sayısının çarpımına yakın olmalıdır. Belirgin biçimde düşük kalıyorsa vCPU'lar fiziksel çekirdekleri paylaşıyor ya da hipervizör tarafında sınırlanıyor olabilir.
CPU steal
Steal, sanal makinenizin çalışmak istediği halde hipervizörün CPU'yu başka bir konuğa verdiği zamanın oranıdır. Betik bunu tüm vCPU'lar tam yükteyken ölçer, çünkü steal boşta değil yük altında ortaya çıkar. Sıfıra yakın değer beklenir. Yük altında birkaç yüzdeyi düzenli olarak aşıyorsa ve farklı saatlerde tekrar ediyorsa, yoğun saatlerde uygulamanız yavaşlayacaktır. Uzun dönem steal ve bellek takibi için VPS'te kaç GB RAM yeteceğini ölçen betik yazımızı da kullanabilirsiniz.
Disk: 4K IOPS, p99 gecikme ve ioping
Veritabanı, e-ticaret ve ERP yükleri için en önemli değer 4K rastgele okuma ve yazma IOPS'udur. Sıralı MiB/sn değeri yüksek olup 4K IOPS'u düşük kalan bir disk, yedek kopyalarken hızlı, sorgu yanıtlarında ise yavaş olur. Kontrol noktaları:
- Teklifte bir IOPS sınırı yazıyorsa ölçülen değer bu sınıra yakın mı?
- p99 gecikme, ortalamanın çok üzerinde mi? Ani sıçramalar paylaşımlı depolamada kuyruk oluştuğunu gösterir.
- ioping ortalaması mikrosaniye düzeyindeyse disk yerel NVMe'ye yakın davranıyordur. Milisaniye düzeyindeyse depolama büyük olasılıkla ağ üzerinden geliyordur. Bu kendi başına kötü değildir ama veritabanı için hesaba katılmalıdır.
Ağ: iperf3 ve ping
iperf3 sonucu, iki uç arasındaki en yavaş halkayla sınırlıdır. Ofis bağlantınız 100 Mbit ise VPS'in 1 Gbit portunu ölçemezsiniz. Bant genişliği testi için karşı ucu iyi bağlantılı bir sunucu olarak seçin. Yeniden gönderim (retransmits) sayısının yüksek olması, yol üzerinde tıkanıklık ya da kayıp olduğuna işaret eder.
Ping'de ortalamadan çok mdev (değişkenlik) ve paket kaybı önemlidir. Kullanıcılarınız Türkiye'deyse ping hedeflerine ofisinizin ya da kullanıcılarınızın bağlandığı operatör ağındaki bir adresi ekleyin. Kullanıcılarınızla aynı şehirdeki bir sunucuyla Avrupa'daki bir sunucu arasındaki gecikme farkı, uzak masaüstü ve veritabanı bağlantısı gibi etkileşimli işlerde doğrudan hissedilir.
İki sağlayıcıyı aynı betikle karşılaştırma ve TL başına performans
Adil bir karşılaştırma için şu kuralları uygulayın:
- Aynı betik, aynı ayarlar (
FIO_BOYUT_GB,FIO_SURE,CPU_SURE) ve aynı dağıtım sürümü. - Her adayda en az üç çalıştırma: biri iş saatinde, biri akşam, biri gece. Gürültülü komşu etkisi çoğunlukla yoğun saatlerde görünür.
- iperf3 ve ping için her adayda aynı karşı uç.
Üç çalıştırmayı oturum kopsa da sürecek biçimde başlatmak için tmux ya da screen içinde şu döngüyü kullanabilirsiniz:
# Dört saat arayla üç ölçüm alır; değerleri kendi durumunuza göre değiştirin
for i in 1 2 3; do
SAGLAYICI=firma-a AYLIK_TL=1500 IPERF_SUNUCU=192.0.2.10 ./sunucu-test.sh
[ "$i" -lt 3 ] && sleep 14400
done
Her adaydan ozet.csv dosyasını alıp tek dosyada birleştirin (başlık satırını yalnız bir kez bırakın). Ardından sağlayıcı başına ortalamayı ve 100 TL başına düşen performansı şu komutla hesaplayın:
# Sağlayıcı başına ortalama ve 100 TL başına performans; aylik_tl sıfır olan satırlar atlanır
awk -F, 'NR > 1 && $16 > 0 {
n[$2]++; tek[$2] += $5; cok[$2] += $6; iops[$2] += $9; steal[$2] += $7; tl[$2] = $16
}
END {
printf "%-16s %8s %12s %12s %12s\n", "saglayici", "steal%", "tek/100TL", "cok/100TL", "iops/100TL"
for (s in n)
printf "%-16s %8.2f %12.1f %12.1f %12.0f\n", s, steal[s]/n[s],
tek[s]/n[s]/tl[s]*100, cok[s]/n[s]/tl[s]*100, iops[s]/n[s]/tl[s]*100
}' tum-ozet.csv
Karar verirken TL başına puanı tek ölçüt yapmayın. Önce iş yükünüzün gerektirdiği alt sınırı belirleyin: örneğin "4K rastgele okuma şu IOPS'un altında olmasın, steal yük altında düşük kalsın, ofise gecikme şu milisaniyeyi geçmesin". Bu sınırları geçen adaylar arasında TL başına performansa bakın. Fiyatın içine KDV, trafik, yedek ve ek IP gibi kalemlerin dahil olup olmadığını da aynı biçimde eşitleyin. Türkiye'deki kullanıcılar için düşük gecikme arıyorsanız İstanbul ve Strasbourg lokasyonlu bulut sunucu seçeneklerini de aynı betikle deneyip listenize ekleyebilirsiniz.
Sık yapılan hatalar
- Önbelleğe yazılan disk testi:
dd if=/dev/zero of=dosya bs=1M count=1000gibi komutlar sayfa önbelleğine yazdığı için gerçekte olduğundan çok daha yüksek hız gösterir. Betikteki fio testleri--direct=1ile önbelleği atlar. Kendi testinizi yazıyorsanız bu seçeneği kaldırmayın. - Tek seferlik ölçüm: Paylaşımlı altyapıda performans saatten saate değişebilir. Tek ölçümle karar vermek, şanslı ya da şanssız bir anı genellemek demektir.
- Gürültülü komşu etkisini boşta aramak: Steal ve disk gecikmesi sunucu boştayken düşük görünür. Ölçüm yük altında yapılmalıdır.
- Test dosyasını yanlış diske koymak: Ek bir veri diski aldıysanız
TEST_DIZINIdeğişkenini o diskin bağlandığı dizine yönlendirin. Aksi halde sistem diskini ölçersiniz. - Farklı araç sürümleriyle karşılaştırmak: Ubuntu ve Rocky Linux'taki sysbench sürümleri farklı olabilir. Karşılaştırdığınız adaylarda aynı dağıtımı kurun.
- Canlı sunucuda test: fio ve sysbench birkaç dakika boyunca tüm kaynağı kullanır. Üretimdeki bir sunucuda çalıştırırsanız hem kullanıcılarınızı yavaşlatırsınız hem de sonuç bozulur.
Sık sorulan sorular
Betik sunucuya ya da verilere zarar verir mi?
Betik yalnız kendi oluşturduğu fio-test.dat dosyasına yazar ve çıkışta bu dosyayı siler. Ham disk aygıtına yazmaz, sistem ayarı değiştirmez. Yine de yazma testi yaptığı için canlı veri bulunan bir sunucuda değil, yeni kurulmuş deneme sunucusunda çalıştırılmalıdır.
Test ne kadar sürer?
Varsayılan ayarlarla CPU testleri yaklaşık 1 dakika, bellek testi 15 saniyeye kadar, dört fio testi yaklaşık 4,5 dakika, iperf3 ve ping de birkaç dakika sürer. fio ilk çalıştırmada test dosyasını oluşturduğu için yavaş diskte bu süre uzayabilir.
Herkese açık benchmark betikleri yerine neden bunu kullanayım?
Hazır betikler hızlı bir fikir verir. Ancak çoğu zaman ayarlarını ve karşı uçlarını siz seçemezsiniz, sonuçları da karşılaştırmaya uygun bir dosyaya yazmazlar. Bu betikte her parametre açık, karşı uç sizin kontrolünüzde ve her çalıştırma CSV'ye bir satır olarak eklenir.
Fiziksel sunucuda da kullanılabilir mi?
Evet. Fiziksel sunucuda steal değeri sıfır çıkmalıdır, systemd-detect-virt de none döndürür. Bu iki değer, teslim edilen makinenin gerçekten size ayrılmış bir donanım olup olmadığını kontrol etmek için de işe yarar.
Sonuçlar teklifte yazandan düşük çıkarsa ne yapmalıyım?
Ölçümü farklı saatlerde tekrarlayın, sonra rapor dosyasını sağlayıcının destek ekibiyle paylaşın. Sapma kalıcıysa ve sağlayıcı bir açıklama ya da çözüm sunmuyorsa, deneme süresi bitmeden başka bir adaya geçmek için elinizde somut veri olur.
Sonuç
Sunucu seçimi, teklif sayfasındaki etiketlerle değil ölçülen sayılarla yapılmalı. Deneme süresinde bu betiği her adayda en az üç kez çalıştırın. Önce iş yükünüzün alt sınırlarını tanımlayın, sonra steal, 4K IOPS, p99 gecikme ve ağ gecikmesi değerlerini karşılaştırın, en sonda da TL başına performansa bakın. Böylece kararınızı tahmine değil, saklayıp sonradan yeniden ölçebileceğiniz bir rapora dayandırmış olursunuz.
- #sunucu seçimi
- #vps performans testi
- #sysbench
- #fio
- #iperf3
- #cpu steal
- #bash betiği
Yazar
Kurucu, sunucu.com.tr · Bulut altyapısı ve yapay zeka otomasyonları
sunucu.com.tr ve Sunucu UK'in kurucusu. Bulut altyapısı, sanallaştırma ve sunucu yönetimi üzerine çalışıyor; şirketlerin iş yazılımlarını, web sitelerini ve yapay zeka iş yüklerini güvenli sunuculara taşıyor. Blogdaki rehberler sahada karşılaşılan kurulum, güvenlik ve taşıma işlerinden derlenir; yazılar yapay zeka desteğiyle hazırlanır ve kaynaklarla doğrulanır.