.NET verileri için Application Insights Profiler'ı görüntüleme

Web performans testi çalıştırdığınızı varsayalım. Web uygulamanızın yük altında nasıl çalıştığını anlamak için izlemelere ihtiyacınız vardır. .NET Profiler'ın izlemeleri karşıya yükleyebilmesi için hizmetinizin etkin bir şekilde istekleri işlemesi gerekir. Bu makalede şunları yapacaksınız:

  • Web performans testi başlatarak veya isteğe bağlı bir Profil Oluşturucu oturumu başlatarak web uygulamanıza trafik oluşturun.
  • Yük testi veya Profil Oluşturucu oturumunuzdan sonra Profil Oluşturucu izlemelerini görüntüleyin.
  • Profil Oluşturucu performans verilerini ve çağrı yığınını okumayı öğrenin.

Azure hizmetinize trafik oluşturma

.NET için Profiler'ı etkinleştirdiyseniz Azure Load Testing ile kısa bir yük testi çalıştırın.

Azure hizmetinizde zaten gelen trafik varsa veya yalnızca el ile trafik oluşturmak istiyorsanız yük testini atlayın ve isteğe bağlı bir Profil Oluşturucu oturumu başlatın:

  1. Azure portalında Application Insights kaynağınızı açın. Soldaki menüdenPerformansı> seçin.

  2. Performans bölmesinde Profil Oluşturucu ayarları için üstteki menüden Profil Oluşturucu'ya tıklayın.

    Performans bölmesindeki Profil Oluşturucu düğmesinin ekran görüntüsü.

  3. Profil Oluşturucu ayarları sayfası yüklendikten sonra Şimdi ProfilLe'yi seçin.

    Profil Oluşturucu sayfası özelliklerinin ve ayarlarının ekran görüntüsü.

İzlemeleri görüntüle

  1. Profil Oluşturucu oturumlarının çalışması tamamlandıktan sonra Performans bölmesine dönün.

  2. Detaylar... altında, izlemeleri görüntülemek için Profil oluşturucu izlemeleri'ni seçin.

    İzleme gezgini sayfasının ekran görüntüsü.

İzleme gezgini aşağıdaki bilgileri görüntüler:

Filtre Açıklama
Profil ağacı v. Alev grafiği İzleri ağaç olarak veya grafik biçiminde görüntüleyin.
Sık erişimli yol En büyük yaprak düğümünü açmak için seçin. Çoğu durumda bu düğüm bir performans sorununa yakındır.
Çerçeve bağımlılıkları İzlemelerle ilişkili her bir izlenen çerçeve bağımlılığını görüntülemek için seçin.
Olayları gizle İzleme görünümünden gizlenecek metin dizelerini girin. Öneriler için Önerilen olaylar'ı seçin.
Etkinlik Olay veya işlev adı. Ağaç, SQL ve HTTP olayları gibi oluşan kod ve olayların bir karışımını görüntüler. En üstteki etkinlik, genel istek süresini temsil eder.
Modül İzlenen olayın veya işlevin oluştuğu modül.
İşlem süresi İşlemin başlangıcı ile işlemin sonu arasındaki zaman aralığı.
Zaman çizelgesi İşlevin veya olayın diğer işlevlerle ilgili olarak çalıştığı zaman.

Performans verilerini okuma

.NET Profiler, uygulamanızın performansını analiz etmek için örnekleme yöntemlerinin ve izlemelerin bir bileşimini kullanır. Ayrıntılı veri toplama görevini gerçekleştirirken .NET Profil Oluşturucu:

  • Her makine CPU'sunun her milisaniyedeki yönerge işaretçisini örnekler.

    Her örnek, iş parçacığının tam çağrı yığınını yakalar ve hem yüksek hem de düşük soyutlama düzeylerinde ayrıntılı bilgi verir.

  • Etkinlik bağıntısını ve nedenselliği izlemek için şunları içeren olayları toplar:

    • Bağlam değiştirme olayları
    • Görev Paralel Kitaplığı (TPL) etkinlikleri
    • İş parçacığı havuzu olayları

Zaman çizelgesi görünümünde görüntülenen çağrı yığını, örnekleme ve izlemenin sonucudur. Her bir örnek, iş parçacığının tam çağrı yığınını yakalar. Microsoft .NET Framework'ten ve başvurduğunuz diğer çerçevelerden gelen kodu içerir.

Nesne tahsisi (clr! JIT_New veya clr! JIT_Newarr1)

Clr! JIT_New ve clr! JIT_Newarr1, .NET Framework'te yönetilen bir yığından bellek ayıran yardımcı işlevlerdir.

  • clr!JIT_New bir nesne tahsis edildiğinde çağrılır.
  • clr!JIT_Newarr1 bir nesne dizisi ayrıldığında çağrılır.

Bu iki işlev genellikle hızlı çalışır. Eğer clr!JIT_New veya clr!JIT_Newarr1 zaman çizelgenizde zaman alıyorsa, kod birçok nesne ayırıyor ve önemli miktarda bellek tüketiyor olabilir.

Kod yükleniyor (clr! ThePreStub)

clr!ThePreStub, kodu genellikle tam zamanında (JIT) derleme dahil olmak üzere ilk yürütme için hazırlayan bir .NET Framework yardımcı işlevdir. Her C# yöntemi için clr! PreStub bir işlem sırasında en fazla bir kez çağrılmalıdır.

Eğer clr!ThePreStub bir istek için fazladan zaman alıyorsa, bu yöntemi yürütmek için yapılan ilk istektir. .NET Framework çalışma zamanının ilk yöntemi yüklemesi önemli ölçüde zaman alır. Aşağıdakileri dikkate alın:

  • Kullanıcılarınız erişmeden önce kodun bu bölümünü çalıştıran bir ısınma işlemi kullanma.
  • Derlemelerinizde Yerel Görüntü Oluşturucu (ngen.exe) çalıştırma.

Kilit çekişmesi (clr! JITutil_MonContention veya clr! JITutil_MonEnterWorker)

clr! JITutil_MonContention veya clr! JITutil_MonEnterWorker, geçerli iş parçacığının bir kilidin serbest bırakılmasını beklediğini gösterir. Bu metin genellikle aşağıdaki durumlarda görüntülenir:

  • C# LOCK deyimi yürütme
  • Monitor.Enter yöntemini çağırma
  • MethodImplOptions.Synchronized özniteliğiyle bir yöntem çağırma

Kilit çekişmesi genellikle A iş parçacığı bir kilit aldığında ve B iş parçacığı A iş parçacığı onu serbest bırakmadan önce aynı kilidi almaya çalıştığında oluşur.

Kod yükleniyor ([COLD])

.NET Framework çalışma zamanı ilk kez iyileştirilmemiş kod çalıştırıyorsa, yöntem adı [COLD] içerir:

mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined

Her yöntem için işlem sırasında en fazla bir kez görüntülenmelidir.

Kodun yüklenmesi bir istek için önemli miktarda zaman alıyorsa, bu, isteğin yöntemin optimize edilmemiş kısmını ilk defa çalıştırmasıdır. Kullanıcılarınız erişmeden önce kodun bu bölümünü çalıştıran bir ön ısıtma işlemi kullanmayı düşünün.

HTTP isteği gönder

HttpClient.Send gibi yöntemler, kodun bir HTTP isteğinin tamamlanacağını beklediğini belirtir.

Veritabanı işlemi

SqlCommand.Execute gibi yöntemler, kodun bir veritabanı işleminin bitmesi için beklediğini gösterir.

Bekleme (AWAIT_TIME)

AWAIT_TIME kodun başka bir görevin tamamlandığını beklediğini gösterir. Bu gecikme C# AWAIT deyimiyle gerçekleşir. Kod bir C# AWAIT yaptığında:

  • İş parçacığı gevşer ve denetimi iş parçacığı havuzuna döndürür.
  • AWAIT'in bitmesini bekleyen engellenmiş bir iş parçacığı yok.

Ancak, mantıken, AWAIT işlemini gerçekleştiren iş parçacığı, işlemin tamamlanmasını beklerken engellenir. AWAIT_TIME deyimi, görevin tamamlenmesini bekleyen engellenen süreyi gösterir.

AWAIT_TIME kodunuz yerine çerçeve kodunda görünüyorsa. .NET Profiler şunları gösteriyor olabilir:

  • AWAIT'yi çalıştırmak için kullanılan çerçeve kodu
  • AWAIT hakkında telemetriyi kaydetmek için kullanılan kod

Yalnızca kodunuzu göstermek ve AWAIT'nin nereden kaynaklandığını görmeyi kolaylaştırmak için sayfanın üst kısmında Çerçeve bağımlılıklarının seçimini kaldırın.

Engellenen süre

BLOCKED_TIME kodun başka bir kaynağın kullanılabilir olmasını beklediğini gösterir. Örneğin, şu gibi şeyleri bekliyor olabilir:

  • Eşitleme nesnesi
  • Mevcut bir başlık
  • Bitirme isteği

Yönetilmeyen Eşzamansız

Zaman uyumsuz çağrıların iş parçacıkları arasında izlenmesi için .NET Framework, Windows için Olay İzleme (ETW) olayları yayar ve iş parçacıkları arasında etkinlik kimliklerini geçirir. Yönetilmeyen (yerel) kod ve zaman uyumsuz kodun bazı eski stilleri bu olayları ve etkinlik kimliklerini eksik olduğundan, .NET Profiler iş parçacığını ve bu iş parçacığında çalışan işlevleri izleyemiyor.

Bu öğe, çağrı yığınında Yönetilmeyen Async olarak etiketlenmiştir. Daha fazla içgörü elde etmek için PerfView kullanmak üzere ETW dosyasını indirin.

CPU süresi

CPU, yönergeleri yürütmekle meşgul.

Disk süresi

Uygulama disk işlemleri gerçekleştiriyor.

Ağ süresi

Uygulama ağ işlemleri gerçekleştiriyor.

When sütunu

When sütunu, zaman içinde bir düğüm için toplanan çeşitli kapsayıcı örneklerin görselleştirmesidir. İsteğin toplam aralığı, düğümün kapsayıcı örneklerinin biriktiği 32 zaman dilimine ayrılır. Her kova bir çubuk olarak temsil edilir. Çubuğun yüksekliği ölçeklendirilmiş bir değeri temsil eder.

Aşağıdaki düğümler için çubuk, bir kaynak tüketimini belirli bir kova içinde temsil eder.

  • CPU_TIME veya BLOCKED_TIME olarak işaretlenen düğümler.
  • Cpu, disk veya iş parçacığı gibi bir kaynağın kullanımıyla ilgili belirgin bir ilişkiye sahip düğümler.

Bu ölçümler için birden çok kaynak kullanarak %100'den büyük bir değer elde edebilirsiniz. Örneğin, ortalama aralıkta iki CPU kullanırsanız %200 elde edersiniz.

Sonraki adım