Skip to content

Profiling ve Uygulama Performansı ​

Performans optimizasyonu, ölçülmüş bir darboğazı kullanıcı etkisi ve kapasite hedefiyle ilişkilendirerek azaltma sürecidir. Profiling yapılmadan cache, thread veya instance eklemek semptomu gizleyebilir ve maliyeti artırabilir.

Hızlı Karar ​

BelirtiÖnce ölçTipik müdahale
Yüksek CPUCPU profile, allocation, serializationAlgoritma, batch, thread ve payload
Bellek artışıHeap/live object, GC, allocation profileLifecycle, cache bound, leak
Yavaş APITrace, DB query plan, downstream latencyQuery/index, parallelism, timeout
Düşük throughputQueue, pool saturation, lock contentionBackpressure, pool ve ölçekleme

Üretim Kontrol Listesi ​

  • Problem: Hangi kullanıcı akışı veya SLO etkileniyor?
  • Çözüm: Baseline, hipotez, değişiklik ve before/after ölçümü var mı?
  • Trade-off: Daha düşük latency; daha fazla cache, CPU, memory veya operasyon maliyeti getirebilir.
  • Hata durumu: Cache stampede, thread starvation, pool exhaustion, GC pause ve compression CPU'su incelenmeli.
  • Ölçüm: p50/p95/p99, throughput, error rate, CPU, memory, GC, queue age ve unit cost birlikte izlenmeli.
  • Güvenlik/maliyet: Profil verisi PII sızdırmamalı; production profiling sampling ve retention ile sınırlandırılmalı.

Profiling Metodu ​

  1. Temsilî trafik ve workload için baseline al.
  2. CPU, allocation/heap, lock, I/O ve database trace sinyallerini ayır.
  3. Tek hipotezi değiştirecek küçük bir müdahale yap.
  4. Aynı workload altında latency, error ve resource sonuçlarını karşılaştır.
  5. Kazancı ve yeni trade-off'u ADR veya performance record'a yaz.

Sampling profiler genel hot path'i gösterir; tracing request'in hangi hop'ta beklediğini gösterir; heap dump retained object ve leak için kullanılır. Profiling aracının kendisi latency ve storage ekleyebilir, bu nedenle süre ve kapsam kontrollü olmalıdır.

API ve IO Optimizasyonu ​

  • Response DTO'da yalnızca gerekli alanları taşı; pagination ve field selection ile payload'ı sınırla.
  • gzip/Brotli compression'ı büyük text payload'larda kullan; küçük payload'da CPU maliyetini ölç.
  • HTTP client connection pool, keep-alive, connect/read timeout ve max pending request sınırlarını ayrı ayarla.
  • Bağımsız downstream çağrılarını bounded parallelism ile çalıştır; deadline propagation olmadan paralellik timeout'u büyütebilir.
  • Lazy loading'i yalnızca erişim paterni ve transaction sınırı net olduğunda kullan; ORM'de gizli N+1 üretme.

Database ve Cache ​

Query planı, index selectivity, lock wait, pool utilization ve replica lag ölçülmeden yalnızca cache eklenmemelidir. Repository/ORM abstraction sorgunun gerçek maliyetini gizleyebilir.

Cache hit, miss, eviction, hot key, stampede ve origin fallback izlenir. Cache warming, yalnızca popüler ve düşük değişkenlikli veriler için bounded yapılmalı; deploy sırasında origin'i aynı anda yüklememelidir.

Ölçekleme ​

Yatay ölçekleme stateless application, load distribution ve autoscaling ile kapasiteyi artırır; bottleneck database, license veya shared connection pool ise instance artırmak çözüm değildir. Dikey ölçekleme daha büyük CPU/memory ile basittir fakat tek node sınırı ve maliyet artışı getirir.

Autoscaling sinyali yalnızca CPU olmamalı; request concurrency, queue age, latency, error budget ve downstream saturation da değerlendirilmelidir. CDN, static asset ve cacheable response'ları edge'e taşıyabilir; kişisel veya authorization bağımlı response'lar dikkatle ayrılmalıdır.

Sonuç ​

Başarılı optimizasyon, ölçümde anlamlı iyileşme sağlarken correctness, security, availability ve cost hedeflerini bozmaz. Profil sonucu, değişiklik, beklenen kazanım ve rollback sinyali birlikte kaydedilmelidir.

Eren Demir tarafından oluşturulmuştur.