Performance & Scalability serimizin bir parçası
Tam kılavuzu okuyunPerformans sorunlarının %80'i testlerle değil, son kullanıcılar tarafından keşfedilir. Yük testi, kullanıcılar sorunlarla karşılaşmadan önce gerçek dünyadaki trafik modellerini uygulamanıza göre simüle ederek bu oranı tersine çevirir. Kara Cuma trafiğini yöneten bir site ile çöken bir site arasındaki fark, neredeyse her zaman birisinin önce yük testi yapıp yapmadığıdır.
Bu kılavuz, web uygulamaları, e-Ticaret platformları ve ERP sistemleri için yük testi metodolojisini, araç seçimini, test tasarımını ve sonuçların yorumlanmasını kapsar.
Önemli Çıkarımlar
- Yük testi yalnızca tek bir uç noktayı etkilemekle kalmayıp, gerçekçi kullanıcı davranışını simüle etmelidir
- Optimize etmeden önce performans temellerini belirleyin --- ölçmediğiniz şeyi iyileştiremezsiniz
- Üretim benzeri bir ortamda yük testlerini çalıştırın; Aşama sonuçları üretim davranışını yansıtmayabilir
- Dağıtımdan önce performans gerilemelerini yakalamak için CI/CD'deki yük testlerini otomatikleştirin
Yük Testi Türleri
| Test Türü | Amaç | Süre | Yük Deseni |
|---|---|---|---|
| Duman testi | Minimum yük altında temel işlevleri doğrulayın | 1-2 dakika | 1-5 kullanıcı |
| Yük testi | Beklenen trafik altında performansı doğrulama | 10-30 dakika | Normal trafik |
| Stres testi | Kırılma noktasını bulun | 15-30 dakika | Yavaş yavaş artıyor |
| Başak testi | Ani trafik dalgalanmalarını test edin | 5-10 dakika | Ani atlama |
| Islatma testi | Bellek sızıntılarını ve bozulmasını tespit edin | 2-8 saat | Sürekli normal yük |
k6 ile Yük Testi
Temel Yük Testi
// k6/load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 50 }, // Ramp up to 50 users
{ duration: '5m', target: 50 }, // Stay at 50 users
{ duration: '2m', target: 100 }, // Ramp up to 100 users
{ duration: '5m', target: 100 }, // Stay at 100 users
{ duration: '2m', target: 0 }, // Ramp down
],
thresholds: {
http_req_duration: ['p(95)<500', 'p(99)<1000'],
http_req_failed: ['rate<0.01'],
http_reqs: ['rate>100'],
},
};
export default function () {
// Simulate realistic user behavior
const homeResponse = http.get('https://example.com/');
check(homeResponse, {
'homepage status is 200': (r) => r.status === 200,
'homepage loads in under 1s': (r) => r.timings.duration < 1000,
});
sleep(Math.random() * 3 + 1); // 1-4 seconds think time
const productsResponse = http.get('https://example.com/api/v1/products');
check(productsResponse, {
'products API is 200': (r) => r.status === 200,
'products API under 500ms': (r) => r.timings.duration < 500,
});
sleep(Math.random() * 2 + 1);
}
e-Ticaret Kullanıcı Yolculuğu Testi
// k6/ecommerce-journey.js
import http from 'k6/http';
import { check, group, sleep } from 'k6';
export const options = {
scenarios: {
browsing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 200 },
{ duration: '10m', target: 200 },
{ duration: '5m', target: 0 },
],
exec: 'browsingScenario',
},
purchasing: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '5m', target: 20 },
{ duration: '10m', target: 20 },
{ duration: '5m', target: 0 },
],
exec: 'purchaseScenario',
},
},
thresholds: {
'http_req_duration{scenario:browsing}': ['p(95)<800'],
'http_req_duration{scenario:purchasing}': ['p(95)<2000'],
http_req_failed: ['rate<0.01'],
},
};
export function browsingScenario() {
group('Browse Products', () => {
http.get('https://store.example.com/');
sleep(2);
http.get('https://store.example.com/products');
sleep(3);
http.get('https://store.example.com/products/sample-product');
sleep(2);
});
}
export function purchaseScenario() {
group('Purchase Flow', () => {
// Browse
http.get('https://store.example.com/products/sample-product');
sleep(1);
// Add to cart
http.post('https://store.example.com/api/cart', JSON.stringify({
productId: 'prod_123',
quantity: 1,
}), { headers: { 'Content-Type': 'application/json' } });
sleep(2);
// Checkout
http.get('https://store.example.com/cart');
sleep(3);
// Place order (simulated)
const orderResponse = http.post('https://store.example.com/api/checkout/validate', JSON.stringify({
email: `test-${__VU}@example.com`,
}), { headers: { 'Content-Type': 'application/json' } });
check(orderResponse, {
'checkout validates': (r) => r.status === 200 || r.status === 201,
});
sleep(1);
});
}
Stres Testi (Kırılma Noktasını Bulun)
// k6/stress-test.js
import http from 'k6/http';
import { check } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 100 },
{ duration: '2m', target: 200 },
{ duration: '5m', target: 200 },
{ duration: '2m', target: 500 },
{ duration: '5m', target: 500 },
{ duration: '2m', target: 1000 },
{ duration: '5m', target: 1000 },
{ duration: '5m', target: 0 },
],
};
export default function () {
const res = http.get('https://example.com/api/v1/products');
check(res, {
'status is 200': (r) => r.status === 200,
});
}
Sonuçları Yorumlama
Temel Metrikler
| Metrik | Sağlıklı | Uyarı | Kritik |
|---|---|---|---|
| P95 Tepki Süresi | <500ms | 500ms-2s | >2sn |
| P99 Tepki Süresi | <1s | 1-5s | >5sn |
| Hata Oranı | <%0,1 | %0,1-1 | >%1 |
| Verim | Hedefe ulaştı | Hedefin %80'i | Hedefin <%80'i |
Yaygın Darboğaz Modelleri
CPU'ya bağlı darboğaz: Yanıt süresi yük ile doğrusal olarak artar. P95 ve P99 yavaş yavaş ayrışır.
- Düzeltme: Sıcak kod yollarını optimize edin, CPU kapasitesi ekleyin veya yatay olarak ölçeklendirin
Veritabanı darboğazı: Yanıt süresi belirli bir yük eşiğinde katlanarak artar. Bağlantı havuzunun tükenmesi.
- Düzeltme: Sorgu optimizasyonu, bağlantı havuzu oluşturma, kopyaları okuma (bkz. veritabanı ölçeklendirme kılavuzu)
Bellek darboğazı: Zamanla kademeli bozulma. GC duraklamaları gecikme artışlarına neden olur.
- Düzeltme: Belleği artırın, bellek sızıntılarını düzeltin, nesne tahsisini optimize edin
Ağ darboğazı: Yanıt süresi tüm uç noktalarda eşit şekilde artar. Bant genişliği doygunluğu.
- Düzeltme: Statik varlıklar için CDN, sıkıştırma, yük boyutlarının azaltılması
Performans Temelleri
Bir Temel Oluşturma
Optimize etmeden önce mevcut performansınızı belgeleyin:
# Run baseline test
k6 run --out json=baseline-results.json k6/load-test.js
# Compare after optimization
k6 run --out json=optimized-results.json k6/load-test.js
Performans Bütçesi
Her uç nokta için kabul edilebilir performansı tanımlayın:
| Uç nokta | P95 Hedef | Verim Hedefi |
|---|---|---|
| Ana Sayfa | 500ms | 200 talep/sn |
| Ürün listeleme | 800ms | 150 talep/sn |
| Ürün detayı | 600ms | 200 talep/sn |
| Sepete Ekle | 300ms | 100 talep/sn |
| Ödeme | 2000ms | 50 talep/sn |
| Ara | 500ms | 100 talep/sn |
| Yönetici kontrol paneli | 1500ms | 20 talep/sn |
CI/CD Entegrasyonu
Otomatik Performans Regresyon Testi
# .github/workflows/performance.yml
name: Performance Test
on:
push:
branches: [main]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run k6 load test
uses: grafana/[email protected]
with:
filename: k6/load-test.js
flags: --out json=results.json
env:
K6_TARGET_URL: ${{ secrets.STAGING_URL }}
- name: Check thresholds
run: |
if grep -q '"thresholds":{".*":"fail"' results.json; then
echo "Performance thresholds exceeded!"
exit 1
fi
Yük Testi Kontrol Listesi
Test Etmeden Önce
- Ortam, üretimle eşleşir (örnek türleri, veritabanı boyutu)
- Test verileri temsilidir (gerçekçi ürün sayısı, kullanıcı sayısı)
- İzleme etkin (test sırasında sunucu ölçümlerini izleyin)
- Paydaşlar bilgilendirilir (yük testleri uyarıları tetikleyebilir)
- CDN ve önbelleğe alma, üretimdeki gibi yapılandırıldı
Test Sırasında
- Sunucu CPU'sunu, belleği, disk G/Ç'yi izleyin
- Veritabanı bağlantılarını ve sorgu gecikmesini izleyin
- Hata oranındaki artışları izleyin
- Kaynak tükenmesini kontrol edin (dosya tanımlayıcıları, bağlantılar)
- Performansın düştüğü yük seviyesine dikkat edin
Test Ettikten Sonra
- Temel sonuçları belgeleyin
- Darboğazları ve bunların yük eşiklerini belirleyin
- Performans iyileştirmeleri için destek bildirimleri oluşturun
- Performans bütçesiyle karşılaştırın
- Optimizasyonlardan sonra takip testini planlayın
Sıkça Sorulan Sorular
Test prodüksiyonunu mu yoksa hazırlamayı mı yüklememiz gerekiyor?
Mümkünse her ikisi de. Düzenli testler ve CI/CD entegrasyonu için hazırlama. Aşamalandırma genellikle veritabanı boyutu, önbellek sıcaklığı, CDN yapılandırması ve ağ topolojisi açısından farklılık gösterdiğinden periyodik doğrulama için üretim (trafiğin düşük olduğu saatlerde). Yalnızca bir ortamı test edebiliyorsanız, aşamalandırmayı test edin ancak bunu mümkün olduğunca üretime benzer hale getirin.
Yük testlerini ne sıklıkla yapmalıyız?
Her dağıtımda duman testleri (CI/CD'de otomatikleştirilmiştir). Haftalık olarak veya büyük sürümlerden önce tam yük testleri. Stres testleri üç ayda bir veya bilinen yüksek trafikli etkinliklerden (indirimler, lansmanlar) önce yapılır. Bellek sızıntılarını ve uzun vadeli bozulmayı tespit etmek için testleri üç ayda bir bekletin.
Bir ERP sistemini nasıl yük testi yaparız?
ERP yük testi, farklı görevleri gerçekleştiren eşzamanlı kullanıcıların simüle edilmesini gerektirir: fatura oluşturma, satın alma siparişleri oluşturma, raporları çalıştırma, verileri içe aktarma. En ağır operasyonlara (rapor oluşturma, veri içe aktarma) ve en eşzamanlı operasyonlara (yoğun saatlerde sipariş girişi) odaklanın. ECOSIRE, destek hizmetlerimizin bir parçası olarak Odoo performans testini sağlar.
İstekler arasındaki gerçekçi düşünme süresi nedir?
E-Ticaret taraması için: 2-5 saniye. Formun doldurulması için: 10-30 saniye. Ödeme için: 15-60 saniye. Admin/ERP kullanımı için: 5-15 saniye. Yük testlerinize her zaman rastgele düşünme süresi ekleyin; sabit aralıklar gerçekçi olmayan senkronize yük modelleri oluşturur.
Sırada Ne Var?
Yük testi, optimizasyon çalışmalarınıza yön veren darboğazları ortaya çıkarır. Veritabanı darboğazları için veritabanı ölçeklendirmesi, statik varlık teslimi için CDN optimizasyonu ve elastik kapasite için otomatik ölçeklendirme ile takip edin.
Performans testi ve optimizasyon için ECOSIRE ile iletişime geçin veya altyapı stratejisinin tamamı için DevOps kılavuzumuzu inceleyin.
ECOSIRE tarafından yayınlandı - işletmelerin baskı altında performans gösteren uygulamalar oluşturmasına yardımcı oluyor.
Yazan
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
ECOSIRE ile İşinizi Büyütün
ERP, e-Ticaret, yapay zeka, analitik ve otomasyon genelinde kurumsal çözümler.
İlgili Makaleler
Bulut Barındırma Maliyeti 2026'da Ne Kadar? Gerçek Fiyat Dağılımı (AWS, Hetzner, DigitalOcean, Odoo.sh)
Faturaları ödeyen bir ekibin gerçek 2026 bulut barındırma maliyetleri: ayda 5-25 ABD doları hobi, ayda 50-400 ABD doları SMB, gizli çıkış ve yedekleme ücretleri, ayrılmış örnek matematiği.
2026'da Odoo Barındırma Gereksinimleri: Kullanıcı Sayısına Göre Sunucu Boyutlandırması (Gerçek Yapılandırmalarla)
Kullanıcı sayısına göre Odoo barındırma gereksinimleri: 5 ila 250+ kullanıcı için vCPU, RAM, depolama ve çalışan ayarları ile gerçek dağıtımlardan PostgreSQL ayarlama değerleri.
Shopify Hız Optimizasyonu: Temel Web Verilerini Gerçekten Yönlendiren Teknik Bir Kontrol Listesi (2026)
2026 için sahada test edilmiş Shopify hız kontrol listesi - gerçek mağazalarda LCP, INP ve CLS'yi gerçekte neyin iyileştirdiği, neyin zaman kaybettirdiği ve uygulamaların ve temaların nasıl denetleneceği.
Performance & Scalability serisinden daha fazlası
Shopify Hız Optimizasyonu: Temel Web Verilerini Gerçekten Yönlendiren Teknik Bir Kontrol Listesi (2026)
2026 için sahada test edilmiş Shopify hız kontrol listesi - gerçek mağazalarda LCP, INP ve CLS'yi gerçekte neyin iyileştirdiği, neyin zaman kaybettirdiği ve uygulamaların ve temaların nasıl denetleneceği.
Teknik SEO Denetim Kontrol Listesi 2026: Her Müşteri Sitesinde Çalıştırdığımız 47 Kontrol
2026'da her müşteri sitesinde yürüttüğümüz 47 maddelik teknik SEO denetim kontrol listesi: taranabilirlik, dizine ekleme, kanonik bilgiler, hreflang, Önemli Web Verileri ve günlükler.
Odoo 19 HR: Beceri Matrisi, Kariyer Planları, Performans Döngüleri
Odoo 19 İK yükseltmesi: yerel beceriler matrisi, kariyer yolu planlaması, performans inceleme döngüleri, 9 kutulu tablo, yedekleme planlaması, HRIS entegrasyonu.
Odoo 19 Performans Karşılaştırmaları: PostgreSQL 17 Ayar Numaraları
Gerçek dünya Odoo 19 performans kıyaslamaları: web istemci hızı, ORM verimi, PG17 ayarlama ayarları, bağlantı havuzu oluşturma, çalışan sayıları, ölçeklendirme eşikleri.
OpenClaw Maliyet Optimizasyonu ve Büyük Ölçekte Token Verimliliği
OpenClaw belirteci maliyet optimizasyonu: hızlı önbelleğe alma, model yönlendirme, yanıt önbelleğe alma, toplu API'ler ve üretim aracıları için kiracı başına maliyet korkulukları.
10 Milyon Satırdan Fazla Tablolar için Power BI Artımlı Yenileme
10 milyondan fazla satır tablosu için Power BI Artımlı Yenileme oyun kitabı: bölüm tasarımı, RangeStart/RangeEnd, yenileme ilkeleri, sorgu katlama ve DirectQuery hibritleri.