Yayına almadan önce site yük testi
Yük testi, sitenin seçilen sunucuda kaç ziyaretçiyi kaldırabileceğini ve ilk neyin bozulacağını gösterir. Test yalnızca kendi sunucunuzda yapılır: yük üreteci ayrı bir makinedir, sağlayıcı önceden bilgilendirilir, dış hizmetlerin yerine sahte uç noktalar (stub) konur. Hangi sayılara bakılacağına, bunların hangi programlarla elde edileceğine ve bunlara göre paketin nasıl seçileceğine bakalım.
Geliştiricinin bilgisayarında hızla açılan bir site, aynı anda yüz kişi geldiğinde yanıt vermez hale gelebilir: PHP süreçleri, veritabanı bağlantıları ya da bellek tükenir. Bunu reklam kampanyasının yapıldığı gün öğrenmek, bir hafta önceden öğrenmekten çok daha pahalıya patlar. Yük testi sunucunuzda bir ziyaretçi akışını canlandırır ve sınırın nerede olduğunu, ona ne kadar pay kaldığını gösterir.
Neler ölçülür?
Testin sonucu tek bir sayı değil, birlikte değerlendirilen bir grup göstergedir:
- RPS (saniyedeki istek sayısı): sunucunun kaç isteği işlediği. RPS tek başına pek bir şey söylemez: sunucu saniyede bin isteğe yanıt verebilir, ama her yanıt beş saniye sürebilir.
- Yüzdeliklere göre yanıt süresi: p95, isteklerin %95'inin bu süre içinde tamamlandığı anlamına gelir, p99 ise %99'unun. Ortalama değer yavaş yanıtları gizler: 90 istek 100 ms'de, 10 istek 3 saniyede tamamlandıysa yaklaşık 400 ms'lik ortalama kabul edilebilir görünür, oysa her on ziyaretçiden biri üç saniye bekler.
- Hata oranı: 5xx yanıtları, kopan bağlantılar ve zaman aşımları. Yük altında hatalar genellikle yanıt süresi gözle görülür biçimde artmadan önce ortaya çıkar.
- Sunucu kaynakları: işlemci yükü, boş bellek ve swap, disk beklemesi (iowait), veritabanı bağlantı sayısı. Bu veriler test sırasında sunucunun kendisinden alınır; aksi halde sitenin neye takıldığı anlaşılmaz.
Hedef önceden ve aynı birimlerle belirlenir, örneğin: "saniyede 50 istekte ana sayfa ve katalog için p95 500 ms'nin altında, hatalar %1'in altında". Hedef yoksa test, hiçbir karar verilemeyen bir grafik yığınına dönüşür.
Test türleri
- Duman testi (smoke): bir dakika boyunca birkaç sanal kullanıcı. Senaryonun doğru yazıldığını kontrol eder ve yük yokken temel yanıt süresini verir.
- Yük testi: beklenen en yüksek akış 15–30 dakika boyunca. Sunucunun planlanan yükle başa çıkıp çıkamadığını gösterir.
- Stres testi: yük, hatalar ya da yanıt süresi artana kadar kademeli olarak yükseltilir. Sınırı ve sitenin bu sınırın ötesinde nasıl davrandığını gösterir: hatayı hızla mı döndürüyor, yoksa donup mu kalıyor.
- Uzun süreli test (soak): birkaç saat boyunca ılımlı yük. Bellek sızıntılarını, günlüklerin ve diskin dolmasını, bağlantıların birikmesini ortaya çıkarır.
Senaryo gerçek ziyaretçilere benzemelidir: sayfaların bir karışımı (ana sayfa, katalog, ürün sayfası, arama), işlemler arasında duraklamalar, kullanıcıların bir kısmının oturum açmış ya da sepet kullanıyor olması. Saniyede bin kez önbelleğe alınmış tek bir sayfayı isteyen bir test siteyi değil, önbelleği ölçer.
Araçlar
Aşağıdaki dört programın hepsi ücretsizdir ve komut satırından çalışır. Birden çok sayfalı senaryolar için ilk ikisi, tek bir adresin hızlı kontrolü için son ikisi uygundur.
- k6: senaryolar JavaScript ile yazılır, sonuç doğrudan yüzdeliklerle verilir. Senaryoda eşikler tanımlanır: k6 belgelerine göre
http_req_failed: ['rate<0.01']vehttp_req_duration: ['p(95)<200']koşulları testin sonunda kontrol edilir ve ihlal edilirse k6 sıfırdan farklı bir çıkış koduyla sonlanır. Bu yüzden k6'yı CI'a eklemek kolaydır: siteyi yavaşlatan bir derleme geçemez. - Apache JMeter: senaryolar grafik arayüzde kurulur: formlar, oturum açma, yanıtların ayrıştırılması, CSV'den veriler. Testin kendisinin ise komut satırı modunda çalıştırılması önerilir, yani
jmeter -n -t test.jmx -l test.jtl: grafik mod üretecin kaynaklarını harcar ve sonucu bozar. - wrk: tek bir makineden tek bir adrese büyük yük oluşturan çok iş parçacıklı bir üreteç. Örnek:
wrk -t4 -c100 -d60s --latency https://example.com/, yani 4 iş parçacığı, 100 bağlantı, bir dakika ve gecikme dağılımı. Karmaşık senaryolar Lua ile yazılır. - ab (ApacheBench): en basit seçenek, çoğu zaman Apache ile birlikte zaten kuruludur. Belgelerinde açıkça ab'nin HTTP/1.x'i tam olarak uygulamadığı ve yüksek yükte sunucunun değil kendi hızını ölçebileceği belirtilir. Keep-alive varsayılan olarak kapalıdır,
-kseçeneğiyle açılır. Hızlı bir kontrol için işe yarar, ama paket kararı için yeterli değildir.
Kimseye sorun çıkarmadan nasıl test edilir?
Yük testi, ziyaretçi akını ile aynı istek akışını oluşturur; bu nedenle yalnızca yönettiğiniz bir sunucuda ve sunucunun bulunduğu platformun kurallarına uyarak yapılabilir.
- Yalnızca kendi sunucunuz ve kendi alan adınız. Sahibinin yazılı izni olmadan başkasının sitelerine ve API'lerine yük uygulamak "bir dakikalığına" bile kabul edilemez. Siteniz bir ödeme ağ geçidine, kargo hizmetine ya da harici bir API'ye bağlanıyorsa, test süresince bunların yerine sahte uç noktalar ya da bu hizmetlerin test ortamları kullanılır.
- Sağlayıcıyı bilgilendirin. Sağlayıcının DDoS koruması testi saldırı sanıp üretecin adresini engelleyebilir; bazı sağlayıcıların kuralları da bu tür kontrollerin önceden onaylanmasını şart koşar. Örneğin AWS politikası kendi hazırladığınız hizmetlerin stres testine izin verir, ama DDoS saldırısı simülasyonunu yasaklar. Desteğe tarihi, saati, adresleri ve beklenen hacmi bildiren kısa bir e-posta konuyu çözer. Sağlayıcılarda korumanın nasıl işlediği DDoS koruması: sağlayıcılar gerçekte ne sunuyor yazısında anlatılıyor.
- Paylaşımlı hostingte değil. Paylaşılan bir sunucuda test komşuları yavaşlatır, sonuç da onlara bağlı olur. Test, kaynakların size ayrıldığı bir VPS'te ya da adanmış sunucuda yapılır.
- Üreteç ayrı bir makinede. Aynı sunucuda çalıştırılırsa işlemciyi siteden alır. Üreteç için saatlik ücretli bir VPS kullanışlıdır: test süresince oluşturulur, sonra silinir. accsly.io kataloğuna göre (Kasım 2026) 2.247 VPS sağlayıcısından 173'ü saatlik ücretlendirmeyi açıkça belirtiyor; paketler saatlik ücretli VPS sayfasında toplanmış.
- Trafiği unutmayın. Bir saatlik test yüzlerce gigabayt veri aktarabilir. Pakette trafik sınırlıysa ya da bağlantı komşularla paylaşılıyorsa, aşım ücretlendirilir veya hız düşürülür; ayrıntılar Bant genişliği ve trafik: 1 Gbps ve sınırsız ne anlama gelir yazısında.
- Sitenin önündeki CDN ve koruma. Alan adı bir CDN'e bağlıysa, onun üzerinden yapılan test CDN'i ölçer ve onun sınırlarına takılabilir. Kaynak sunucu doğrudan kendi adresinden test edilir, CDN üzerinden yük ise CDN sağlayıcısıyla önceden kararlaştırılır.
Sonuç nasıl okunur ve paket nasıl seçilir?
Yük kademeli olarak artarken RPS önce onunla birlikte yükselir, yanıt süresi ise neredeyse değişmez. Ardından doyma noktası gelir: RPS artmayı bırakır, p95 hızla yükselir, hatalar belirir. Olağan yük bu noktanın belirgin biçimde altında kalmalıdır: ani artışlar, arka plan görevleri ve kitlenin büyümesi için pay gerekir. Kullanışlı bir ölçüt, beklenen zirvenin bulunan sınırın yarısından fazlasını kaplamamasıdır.
Sonra sunucunun doyma noktasında neye takıldığına bakılır:
- işlemci %100 yükteyse daha fazla çekirdek gerekir, darboğaz tek bir iş parçacığındaysa daha yüksek frekans; 4 GHz ve üzeri frekanslı paketler yüksek işlemci frekanslı VPS sayfasında toplanmış;
- bellek bittiyse ve sunucu swap kullanmaya başladıysa daha fazla bellek ya da daha az PHP-FPM süreci ve işçi gerekir; miktar için ölçütler Bir web sitesine ne kadar bellek ve kaç çekirdek gerekir? yazısında;
- iowait yüksekse disk yetişemiyordur, genellikle veritabanı yüzünden; NVMe ve indeksler yardımcı olur, karşılaştırma NVMe mi SSD mi: web sitesi için fark var mı? yazısında;
- kaynaklar boş ama hatalar varsa sınır ayarlardadır: veritabanı bağlantı sınırı, web sunucusunun işçi sayısı, açık dosya sayısı.
Satın almadan önce testi almayı düşündüğünüz pakette tekrarlamakta fayda var: sağlayıcıların işlemcileri ve diskleri, açıklamadaki rakamların gösterdiğinden daha fazla farklılık gösterir. Bunu yapmanın en kolay yolu, Ödeme yapmadan önce VPS ping ve hızı nasıl test edilir yazısında anlatıldığı gibi saatlik ücretlendirme ya da deneme süresidir. Yayına aldıktan sonra aynı göstergeler (yanıt süresi, hatalar, kaynak kullanımı) izlemeye aktarılır; böylece yükün artışı, site hata vermeye başlamadan önce görülür.