.NET Performans & Tanılama Araçları 4 dk okuma 13 okunma

Performans Profiling: dotMemory, dotTrace, PerfView

Performans profiling, darboğazın nerede olduğunu tahminle değil ölçümle bulma disiplinidir. dotMemory bellek sızıntıları ve tahsis desenleri için, dotTrace CPU ve zaman çizelgesi analizi için, PerfView ise özellikle Windows'ta GC, JIT ve thread blokajlarını derinlemesine incelemek için kullanılır. Doğru araç, sorunun türüne (bellek mi, CPU mu, bekleme mi) göre seçilir.

Performans Profiling: dotMemory, dotTrace, PerfView

Performans Profiling: dotMemory, dotTrace, PerfView

Performans sorunlarıyla mücadelede en büyük yanılgı, "nerede yavaş olduğunu hissetmek"tir. Gerçek darboğaz, çoğu zaman sezginin işaret ettiği yerden farklıdır. Profiling (profil çıkarma), uygulamanın çalışma zamanındaki davranışını ölçerek bu belirsizliği ortadan kaldırır. .NET ekosisteminde üç araç öne çıkar: dotMemory (bellek), dotTrace (CPU ve zaman çizelgesi) ve PerfView (derin sistem ve GC analizi).


1. Hangi Sorun, Hangi Araç?

Profil aracı seçimi, çözmeye çalıştığınız sorunun türüne bağlıdır.

Belirti Önerilen Araç Neye Bakılır?
Bellek sürekli artıyor, azalmıyor dotMemory Heap snapshot'ları, retention path (nesneyi ne hayatta tutuyor?)
Uygulama yavaş, CPU yüksek dotTrace Hot methods, call tree, exclusive time
CPU düşük ama işlem yavaş/donuyor PerfView (ThreadTime) Hangi thread neyi bekliyor? (kilit, I/O)
GC duraklamaları şüphesi PerfView veya dotTrace (Timeline) GC sayısı, duraklama süreleri, tahsis noktaları
Üretimde düşük overhead ile izleme PerfView ETW tabanlı, kurulum gerektirmez

Temel Kural: Önce dotnet-counters gibi hafif bir araçla genel eğilimi görün (CPU, GC sıklığı, ThreadPool kuyruğu). Ardından sorunun türüne göre derinlemesine analiz için doğru profiler'ı seçin .


2. dotMemory: Bellek Sızıntısı Avcısı

dotMemory, JetBrains tarafından geliştirilen, .NET uygulamalarının bellek kullanımını analiz eden bir araçtır. Windows, Linux ve macOS'ta çalışır; Rider veya Visual Studio ile entegre olarak ya da bağımsız uygulama olarak kullanılabilir .

Ne İşe Yarar?

  • Heap snapshot'ları almak: Bellekteki tüm nesnelerin anlık görüntüsünü çıkarır.

  • Snapshot karşılaştırması: İki zaman noktası arasında hangi nesnelerin biriktiğini gösterir; sızıntı avında en güçlü yöntemdir.

  • Retention path (tutma yolu): Bir nesnenin neden hâlâ bellekte olduğunu, onu hangi referansın hayatta tuttuğunu adım adım gösterir .

  • Tahsis desenleri: Hangi metotların ne kadar bellek tahsis ettiğini ortaya koyar.

Ne Zaman Kullanılır? Bellek kullanımının sürekli arttığı, OutOfMemoryException alındığı veya GC'nin beklenenden sık çalıştığı durumlarda ilk başvurulacak araçtır .


3. dotTrace: CPU ve Zaman Çizelgesi Analizi

dotTrace, yine JetBrains'in CPU profiling aracıdır. dotMemory ile aynı pakette gelir ve benzer platformları destekler .

İki Temel Profiling Modu:

Mod Ne Yapar? Ne Zaman Kullanılır?
Sampling Belirli aralıklarla thread stack'lerini örnekler; düşük overhead. İlk bakış, genel darboğazı bulmak.
Timeline Thread durumlarını, GC olaylarını, I/O beklemelerini zaman çizelgesinde gösterir. UI donması, aşırı GC, dengesiz iş yükü, I/O sorunları.

Öne Çıkan Özellikler:

  • Async/await desteği: Asenkron çağrıların tüm parçalarını aynı yerde gösterir; diğer araçlarda bu genellikle farklı stack'lere dağılmıştır .

  • Hot methods ve call tree: En çok zaman harcayan metotları hiyerarşik olarak listeler.

  • Filtreleme: "UI donması yaşandığında GC kilidi var mıydı?" gibi karmaşık sorguları birkaç tıklamayla yanıtlar .

Sınırlama: Rider veya Visual Studio entegrasyonunda yalnızca Call Tree ve Top Methods görünümleri mevcuttur; tam özellik seti için bağımsız dotTrace uygulaması gerekir .


4. PerfView: Windows'ta En Derin Analiz

PerfView, Microsoft tarafından geliştirilen, ücretsiz ve açık kaynaklı bir performans analiz aracıdır. ETW (Event Tracing for Windows) altyapısını kullanır ve Windows'a özeldir; kurulum gerektirmez, tek bir .exe olarak çalışır .

Neden Önemli?

  • Düşük overhead: Üretim ortamında dahi kullanılabilir.

  • Derin görünürlük: GC, JIT, ThreadPool, kilit çekişmesi (lock contention), dosya I/O — hepsi tek bir trace'te.

  • ThreadTime görünümü: Hangi thread'in neyi beklediğini (kilit, I/O, GC) gösterir. "CPU boş ama uygulama yavaş" sorununun tek çözümü budur .

  • GC istatistikleri: Nesil sayıları, duraklama süreleri, tahsis noktaları.

Dezavantajı: Öğrenme eğrisi diktir; arayüzü yoğundur. Ancak bir kez öğrenildiğinde, ücretsiz araçlar arasında rakibi yoktur .

Önemli Not: PerfView, ETW tabanlı olduğu için yönetici izni gerektirir ve yalnızca Windows'ta çalışır. Linux/macOS'ta dotnet-trace ile toplanan .nettrace dosyaları PerfView'da açılabilir .


5. Doğru İş Akışı: Ölç, Analiz Et, Düzelt

Adım 1: Belirtiyi Tanımlayın
"Uygulama yavaş" yeterince spesifik değildir. "Bu endpoint 40 saniye sürüyor" veya "Bellek 2 saatte 2GB'a çıkıyor" gibi net bir belirti belirleyin .

Adım 2: Hafif Araçla Ön İnceleme
dotnet-counters ile CPU, GC sıklığı ve ThreadPool kuyruğunu izleyin. Bu, hangi profiler'a ihtiyacınız olduğunu söyler .

Adım 3: Doğru Profiler ile Derinleşin

  • Bellek sorunu → dotMemory (snapshot karşılaştırması).

  • CPU sorunu → dotTrace (hot methods) veya PerfView (CPU Stacks).

  • Bekleme/blokaj sorunu → PerfView (ThreadTime).

Adım 4: Düzeltin ve Yeniden Ölçün
Optimizasyon sonrası aynı senaryoyu tekrar profileyin. Kazanç yoksa değişikliği geri alın; "daha hızlı görünüyor" yeterli değildir.


6. En İyi Pratikler

Pratik Açıklama
Tahmin etmeyin, ölçün Profiler olmadan yapılan optimizasyon, yanlış yeri hedefleme riski taşır.
Doğru aracı seçin Bellek için dotMemory, CPU için dotTrace, derin sistem analizi için PerfView.
Üretimde dikkatli olun PerfView düşük overhead ile üretimde kullanılabilir; dotTrace/dotMemory genellikle staging'de tercih edilir.
Snapshot'ları karşılaştırın Tek snapshot yanıltıcıdır; iki zaman noktası arasındaki fark sızıntıyı gösterir.
ThreadTime'ı unutmayın CPU düşükken yavaşlık varsa, sorun beklemedir; dotTrace veya PerfView ThreadTime kullanın.

Sonuç

Performans profiling, "hissetmek" değil "bilmek" disiplinidir. dotMemory, bellek sızıntılarını ve tahsis desenlerini ortaya çıkarır; dotTrace, CPU'yu neyin tükettiğini ve zamanın nereye gittiğini gösterir; PerfView ise Windows'ta GC, JIT ve thread blokajlarına kadar inen en derin analizi sunar. Doğru araç, sorunun türüne göre seçilir ve her optimizasyon ölçümle doğrulanır. Unutmayın: En pahalı performans sorunu, fark edilmeyen olandır; en iyi profiler, sorunu kullanıcılar fark etmeden çözen araçtır.

Tüm yazılar Soru ya da yorumun mu var? Yaz