Bottleneck (darboğaz), bir sistemin veya sürecin genel performansını sınırlayan en yavaş, en verimsiz bileşenine verilen isimdir.
Genel anlamda, bir üretim hattındaki en dar boru parçası ne kadar küçükse o kadar akışı kısıtlıyorsa, bottleneck de sistemdeki en düşük kapasiteye sahip nokta olduğu için tüm sürecin akışını o belirler.
Bilgisayar sistemlerinde de benzer: Uygulamanın verdiği cevap süresini en çok yavaşlatan bileşen (CPU, bellek, disk, ağ, veri tabanı vs.) bottleneck olur.
CPU bound
İşlemci, hesaplama ağırlıklı görevleri hızla işleyemediğinde ortaya çıkar.
I/O bound
Disk veya ağ girdi/çıkışı (read/write, HTTP çağrıları vs.) çok yavaş olduğunda.
Memory bound
Yetersiz RAM veya sık sık GC (Çöp Toplama) nedeniyle bellek erişimleri hantal çalıştığında.
Database bound
Sorguların yavaşlığı, indeks eksikliği, lock’lar veya yetersiz bağlantı havuzu (connection pool) yüzünden.
Network bound
Uygulama parçaları arasındaki ağ iletişimi zayıf veya tıkanıksa.
Profiling/Monitoring Araçları
Java için: VisualVM, JProfiler, YourKit, Flight Recorder
CPU/Heap/disk I/O/metriklerini gerçek zamanlı izleyen APM’ler (New Relic, Dynatrace, Prometheus+Grafana)
Log ve Metrik Toplama
Spring Boot Actuator endpoint’leri ( /actuator/metrics, /actuator/trace )
Özel sayaçlar (Micrometer) ile belirli metrikleri toplamak
Basit Ölçümler
Zaman damgası alıp kritik kod blokları arasındaki farkı ölçmek
System.nanoTime() veya StopWatch kullanımı
Load Testing
JMeter, Gatling, Locust gibi araçlarla yük altında sistem davranışını gözlemlemek
CPU Bound İse
Paralel işleme: CompletableFuture, thread pool’lar
Hesaplama yoğun kodu optimize etmek, algoritma iyileştirmesi
Gerekirse daha hızlı CPU’lu veya çekirdek sayısı yüksek sunucuya taşıma
I/O Bound İse
Asenkron I/O (Reactive programming – WebFlux, Project Reactor)
Batched ve toplu işlemlerle I/O sayısını azaltmak
Caching (Redis, in-memory cache)
Database Bound İse
Sorgu optimizasyonu: JOIN’leri, WHERE koşullarını gözden geçirmek
Uygun indeksler eklemek veya yeniden düzenlemek
Connection pool boyutunu ayarlamak (HikariCP konfigürasyonu)
Read-replica kullanmak, write ve read trafikleri ayırmak
Network Bound İse
HTTP çağrılarını kısaltmak, timeout’ları optimize etmek
Veri sıkıştırma (gzip), protokol optimizasyonu (HTTP/2)
CDN kullanmak, edge caching
Bir bottleneck, sistemin performans sınırlayıcısıdır. Önce türünü (CPU, I/O, DB, network vb.) tespit et, sonra hedefe yönelik optimizasyon adımlarını uygula. Bu sayede sisteminin toplam throughput’unu ciddi oranda artırabilirsin.
*Gönderi ve görsel chatgpt ile oluşturulmuştur.