Aracılığıyla paylaş


Uygulama Analizler Profil Oluşturucu verilerini görüntüleme

Bir 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. 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

Profil Oluşturucu'nın izlemeleri karşıya yükleyebilmesi için hizmetinizin istekleri etkin bir şekilde işlemesi gerekir.

Profiler'ı yeni etkinleştirdiyseniz Azure Yük Testi 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 hizmetinizin Uygulama Analizler genel bakış sayfasından sol menüden Performans'ı seçin.

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

    Screenshot of the Profiler button from the Performance pane.

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

    Screenshot of Profiler page features and settings.

İzlemeleri görüntüleme

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

  2. Detaya git... bölümünde Profil oluşturucu izlemeleri'ni seçerek izlemeleri görüntüleyin.

    Screenshot of trace explorer page.

İ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ü açmak için öğesini seçin. Çoğu durumda bu düğüm bir performans sorununa yakındır.
Çerçeve bağımlılıkları İzlemelerle ilişkili izlenen çerçeve bağımlılıklarının her birini görüntülemek için öğesini seçin.
Olayları gizle İzleme görünümünden gizlemek için dizeler yazın. Öneriler için Önerilen olaylar'ı seçin.
Olay 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 olay, genel istek süresini temsil eder.
Modül İzlenen olayın veya işlevin oluştuğu modül.
İş parçacığı 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

Profil oluşturucu, uygulamanızın performansını analiz etmek için örnekleme yöntemlerinin ve izlemelerin bir bileşimini kullanır. Ayrıntılı koleksiyon gerçekleştirirken 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) olayları
    • İş parçacığı havuzu olayları

Zaman çizelgesi görünümünde görüntülenen çağrı yığını, örnekleme ve izlemenin sonucudur. Her örnek iş parçacığının tam çağrı yığınını yakaladığından, Microsoft .NET Framework kodunu ve başvurduğunuz diğer çerçeveleri içerir.

Nesne ayırma (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! bir nesne ayrıldığında JIT_New çağrılır.
  • Clr! bir nesne dizisi ayrıldığında JIT_Newarr1 çağrılır.

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

Kod yükleniyor (clr! ThePreStub)

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

Eğer clr! PreStub bir istek için fazladan zaman alır, bu yöntemi yürütmek için 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ü yürüten 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ılmayı beklediğini gösterir. Bu metin genellikle aşağıdaki durumlarda görüntülenir:

  • C# LOCK deyimini yürüt,
  • Monitor.Enter yöntemini çağırın veya
  • MethodImplOptions.Synchronized özniteliğiyle bir yöntem çağırın.

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ı iyileştirilmemiş kodu ilk kez yürütüyorsa, yöntem adı [COLD] ifadesini 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, isteğin yöntemin iyileştirilmemiş kısmını yürütmeyi başlatması gerekir. Kullanıcılarınız erişmeden önce kodun bu bölümünü yürüten bir ısınma işlemi kullanmayı göz önünde bulundurun.

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 gerçekleştirdiğinde:

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

Ancak mantıksal olarak AWAIT işleminin tamamlandığını belirten iş parçacığı "engellendi". AWAIT_TIME deyimi, görevin tamamlenmesini bekleyen engellenen süreyi gösterir.

AWAIT_TIME kodunuz yerine çerçeve kodunda görünüyorsa Profil Oluşturucu şu şekilde görünebilir:

  • AWAIT'yi yürütmek 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ındaki Framework bağımlılıkları onay kutusunun işaretini kaldırabilirsiniz.

Engellenen süre

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

  • Eşitleme nesnesi
  • Kullanılabilir bir iş parçacığı
  • Bitmek üzere bir istek

Yönetilmeyen Zaman Uyumsuz

Zaman uyumsuz çağrıların iş parçacıkları arasında izlenmesi için .NET Framework ETW olayları yayar ve iş parçacıkları arasında etkinlik kimliklerini geçirir. Yönetilmeyen (yerel) kod ve bazı eski zaman uyumsuz kod stilleri bu olayları ve etkinlik kimliklerini eksik olduğundan, Profil Oluşturucu iş parçacığında çalışan iş parçacığını ve işlevleri izleyemiyor. Bu öğe, çağrı yığınında Yönetilmeyen Zaman Uyumsuz olarak etiketlenmiştir. Daha fazla içgörü için PerfView kullanmak için 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 demetine ayrılır. Her demet 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, demet sırasında kaynaklardan birinin tüketimini temsil eder:

  • CPU_TIME veya BLOCKED_TIME olarak işaretlenen düğümler.
  • Bir kaynağı (cpu, disk veya iş parçacığı gibi) tüketmeye ilişkin 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ımlar

Nasıl yapılacağını öğrenin...