Zobrazení dat profileru Přehledy aplikace
Řekněme, že spouštíte test výkonnosti webu. Abyste pochopili, jak vaše webová aplikace běží pod zatížením, budete potřebovat trasování. V tomto článku:
- Vygenerujte provoz do webové aplikace spuštěním testu výkonnosti webu nebo spuštěním relace Profileru na vyžádání.
- Prohlédněte si trasování profileru po zátěžovém testu nebo relaci Profileru.
- Přečtěte si, jak číst data o výkonu profileru a zásobník volání.
Generování provozu do služby Azure
Aby Profiler nahrál trasování, musí vaše služba aktivně zpracovávat požadavky.
Pokud jste profiler nově povolili, spusťte krátký zátěžový test s využitím služby Azure Load Testing.
Pokud už vaše služba Azure obsahuje příchozí provoz nebo pokud chcete jenom ručně generovat provoz, přeskočte zátěžový test a spusťte relaci Profileru na vyžádání:
Na stránce Přehled aplikace Přehledy pro vaši službu Azure vyberte v nabídce vlevo výkon.
V podokně Výkon vyberte Profiler v horní nabídce pro nastavení profileru.
Jakmile se stránka nastavení profileru načte, vyberte Profil hned.
Zobrazení trasování
Po dokončení spuštění relací Profileru se vraťte do podokna Výkon .
V části Přejít k podrobnostem... vyberte trasování profileru a zobrazte trasování.
Průzkumník trasování zobrazí následující informace:
Filtr | Popis |
---|---|
Profilový strom v. Graf plamene | Prohlédněte si trasování jako strom nebo ve formuláři grafu. |
Horká cesta | Výběrem otevřete největší uzel typu list. Ve většině případů je tento uzel blízko kritického bodu výkonu. |
Závislosti architektury | Výběrem zobrazíte všechny závislosti trasované architektury přidružené k trasování. |
Skrytí událostí | Zadejte řetězce, které chcete skrýt v zobrazení trasování. Vyberte Navrhované události pro návrhy. |
Událost | Název události nebo funkce Strom zobrazuje kombinaci kódu a událostí, ke kterým došlo, například události SQL a HTTP. Hlavní událost představuje celkovou dobu trvání požadavku. |
Modul | Modul, ve kterém došlo k trasované události nebo funkci. |
Čas vlákna | Časový interval mezi začátkem operace a koncem operace. |
Časová osa | Čas, kdy byla funkce nebo událost spuštěna ve vztahu k jiným funkcím. |
Čtení dat o výkonu
Profiler používá kombinaci metod vzorkování a instrumentace k analýze výkonu vaší aplikace. Při provádění podrobné kolekce Profiler:
- Vzorkuje ukazatel instrukce každého procesoru počítače v milisekundách.
- Každá ukázka zachycuje kompletní zásobník volání vlákna a poskytuje podrobné informace na vysoké i nízké úrovni abstrakce.
- Shromažďuje události pro sledování korelace aktivity a kauzality, včetně:
- Kontextové přepínání událostí
- Události TPL (Task Parallel Library)
- Události fondu vláken
Zásobník volání zobrazený v zobrazení časové osy je výsledkem vzorkování a instrumentace. Vzhledem k tomu, že každá ukázka zachycuje kompletní zásobník volání vlákna, zahrnuje kód z rozhraní Microsoft .NET Framework a všechny ostatní architektury, na které odkazujete.
Přidělení objektů (clr! JIT_New nebo clr! JIT_Newarr1)
Clr! JIT_New a clr! JIT_Newarr1 jsou pomocné funkce v rozhraní .NET Framework, které přidělují paměť ze spravované haldy.
- Clr! JIT_New je vyvolána při přidělení objektu.
- Clr! JIT_Newarr1 je vyvolána při přidělení pole objektu.
Tyto dvě funkce obvykle fungují rychle. Pokud je clr! JIT_New nebo clr! JIT_Newarr1 na časové ose nějakou dobu trvá, může kód přidělovat mnoho objektů a spotřebovát velké množství paměti.
Načítání kódu (clr! ThePreStub)
Clr! ThePreStub je pomocná funkce v rozhraní .NET Framework, která připravuje kód pro počáteční spuštění, což obvykle zahrnuje kompilaci JIT (just-in-time). Pro každou metodu jazyka C# clr! ProceduraPreStub by měla být vyvolána maximálně jednou během procesu.
Pokud je clr! ThePreStub pro požadavek trvá déle, jedná se o první požadavek na provedení této metody. Načtení první metody za běhu rozhraní .NET Framework trvá značné množství času. Rozmyslete si:
- Pomocí procesu zahřívání, který spustí danou část kódu předtím, než k němu uživatelé přistupují.
- Spuštění generátoru nativních imagí (ngen.exe) ve vašich sestaveních.
Uzamknout kolize (clr! JITutil_MonContention nebo clr! JITutil_MonEnterWorker)
Clr! JITutil_MonContention nebo clr! JITutil_MonEnterWorker značí, že aktuální vlákno čeká na uvolnění zámku. Tento text se často zobrazuje v těchto případech:
- Spusťte příkaz C# LOCK .
- Vyvolání metody Monitor.Enter nebo
- Vyvolá metodu s atributem MethodImplOptions.Synced .
Kolize zámků obvykle nastane, když vlákno A získá zámek a vlákno B se pokusí získat stejný zámek předtím, než vlákno A uvolní.
Načítání kódu ([COLD])
Pokud modul runtime rozhraní .NET Framework spouští neoptimalizovaný kód poprvé, název metody bude obsahovat [COLD]:
mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined
Pro každou metodu by se měla během procesu zobrazit maximálně jednou.
Pokud načítání kódu pro požadavek trvá značné množství času, je to spuštění požadavku neoptimalizované části metody. Než k němu uživatelé přistupují, zvažte použití procesu zahřívání, který tuto část kódu spustí.
Odeslání požadavku HTTP
Metody, jako je HttpClient.Send , označují, že kód čeká na dokončení požadavku HTTP.
Operace databáze
Metody, jako je SqlCommand.Execute , indikují, že kód čeká na dokončení databázové operace.
Čekání (AWAIT_TIME)
AWAIT_TIME označuje, že kód čeká na dokončení jiného úkolu. K tomuto zpoždění dochází pomocí příkazu C# AWAIT . Když kód provede C# AWAIT:
- Vlákno se odvíje a vrátí řízení do fondu vláken.
- Neexistuje žádné blokované vlákno, které čeká na dokončení funkce AWAIT .
Logicky však vlákno, které provedlo operátor AWAIT , je "blokováno", a čeká na dokončení operace. Příkaz AWAIT_TIME označuje blokovaný čas a čeká na dokončení úkolu.
Pokud se AWAIT_TIME zdá být v kódu architektury místo vašeho kódu, může se profiler zobrazit:
- Kód architektury použitý k provedení příkazu AWAIT
- Kód použitý k záznamu telemetrie o operátoru AWAIT
Zaškrtnutí políčka Závislosti architektury v horní části stránky můžete zrušit, abyste zobrazili jenom kód a usnadnili zobrazení původu funkce AWAIT.
Blokovaný čas
BLOCKED_TIME značí, že kód čeká na dostupnost jiného prostředku. Může například čekat na:
- Synchronizační objekt
- Vlákno, které má být k dispozici
- Žádost o dokončení
Nespravovaná asynchronní synchronizace
Aby bylo možné sledovat asynchronní volání napříč vlákny, rozhraní .NET Framework generuje události trasování událostí pro Windows a předává ID aktivit mezi vlákny. Vzhledem k tomu, že nespravovaný (nativní) kód a některé starší styly asynchronního kódu nemají tyto události a ID aktivit, Profiler nemůže sledovat vlákno a funkce spuštěné ve vlákně. Tato položka má v zásobníku volání označení Nespravovaná asynchronní synchronizace. Stáhněte si soubor ETW, abyste mohli použít nástroj PerfView , abyste mohli získat další přehled.
Čas procesoru
Procesor je zaneprázdněn prováděním pokynů.
Čas disku
Aplikace provádí diskové operace.
Čas sítě
Aplikace provádí síťové operace.
Když sloupec
Sloupec When představuje vizualizaci různých inkluzivních ukázek shromážděných pro uzel v průběhu času. Celkový rozsah požadavku je rozdělený do 32 časových intervalů, kde se kumulují inkluzivní vzorky uzlu. Každý kbelík je reprezentován jako pruh. Výška pruhu představuje škálovanou hodnotu. Pruh pro následující uzly představuje spotřebu jednoho z prostředků během kontejneru:
- Uzly označené CPU_TIME nebo BLOCKED_TIME
- Uzly se zjevným vztahem k využívání prostředku (například procesoru, disku nebo vlákna).
Pro tyto metriky můžete získat hodnotu větší než 100 % tím, že využíváte více prostředků. Pokud například během průměrného intervalu použijete dva procesory, získáte 200 %.
Další kroky
Naučte se...
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro