Az Application Insights Profiler megtekintése .NET-adatokhoz
Tegyük fel, hogy webes teljesítménytesztet futtat. Nyomkövetésre lesz szüksége ahhoz, hogy megértse, hogyan fut a webalkalmazás terhelés alatt. Ebben a cikkben a következőt fogja:
- Forgalmat generálhat a webalkalmazásba egy webes teljesítményteszt elindításával vagy egy igény szerinti profilkészítő munkamenet elindításával.
- A Profiler-nyomkövetések megtekintése a terhelésteszt vagy a Profiler-munkamenet után.
- Megtudhatja, hogyan olvashatja el a Profiler teljesítményadatait és a hívási vermet.
Forgalom generálása az Azure-szolgáltatásba
Ahhoz, hogy a .NET Profiler nyomkövetéseket töltsön fel, a szolgáltatásnak aktívan kell kezelnie a kéréseket.
Ha újonnan engedélyezte a profilkészítőt a .NET-hez, futtasson egy rövid terheléses tesztet az Azure Load Testing használatával.
Ha az Azure-szolgáltatás már rendelkezik bejövő forgalommal, vagy csak manuálisan szeretne forgalmat generálni, hagyja ki a terhelési tesztet, és indítsa el a Profiler igény szerinti munkamenetét:
Az Azure-szolgáltatás Application Insights áttekintési lapján válassza a Bal oldali menü Teljesítmény elemét.
A Teljesítmény panelen válassza a Profiler lehetőséget a Profiler beállításainak felső menüjében.
A Profilkészítő beállításai lap betöltése után válassza a Profil most lehetőséget.
Nyomkövetések megtekintése
A Profiler-munkamenetek futtatása után térjen vissza a Teljesítmény panelre.
A Részletezés... területen válassza a Profiler-nyomkövetések lehetőséget a nyomkövetések megtekintéséhez.
A nyomkövetési kezelő a következő információkat jeleníti meg:
Szűrő | Leírás |
---|---|
Profilfa v. Lángdiagram | A nyomkövetések megtekintése faként vagy gráf formában. |
Gyakori elérésű elérési út | Válassza ki a legnagyobb levélcsomópont megnyitásához. A legtöbb esetben ez a csomópont a teljesítmény szűk keresztmetszete közelében van. |
Keretrendszerfüggőségek | Válassza ki a nyomkövetésekhez társított összes nyomkövetési keretrendszer-függőség megtekintéséhez. |
Események elrejtése | Írja be a sztringeket, hogy elrejtse a nyomkövetési nézetből. A javaslatokhoz válassza a Javasolt események lehetőséget . |
Esemény | Esemény vagy függvény neve. A fa különböző kódokat és eseményeket jelenít meg, például SQL- és HTTP-eseményeket. A felső esemény a kérelem teljes időtartamát jelöli. |
Modul | Az a modul, amelyben a nyomkövetési esemény vagy függvény történt. |
Szálidő | A művelet kezdete és a művelet vége közötti időintervallum. |
Idősor | Az az idő, amikor a függvény vagy esemény más függvényekhez képest futott. |
Teljesítményadatok olvasása
A .NET Profiler mintavételezési módszerek és rendszerezés kombinációját használja az alkalmazás teljesítményének elemzéséhez. A részletes gyűjtemény végrehajtása során a .NET Profiler:
- Az egyes gépi processzorok utasításmutatóját ezredmásodpercenként mutatja be.
- Minden minta rögzíti a szál teljes hívásveremét, és részletes információkat ad mind a magas, mind az alacsony absztrakció szintjén.
- Eseményeket gyűjt a tevékenységek korrelációja és okozati viszonyának nyomon követéséhez, beleértve a következőket:
- Környezetváltási események
- Tevékenység párhuzamos kódtára (TPL) eseményei
- Szálkészlet eseményei
Az idősor nézetben megjelenő hívásverem a mintavételezés és a rendszerezés eredménye. Mivel minden minta rögzíti a szál teljes hívásveremét, a Microsoft .NET-keretrendszer kódját és az Ön által hivatkozott egyéb keretrendszereket is tartalmazza.
Objektumfoglalás (clr! JIT_New vagy clr! JIT_Newarr1)
Clr! JIT_New és clr! JIT_Newarr1 olyan segédfüggvények a .NET-keretrendszer, amelyek memóriát foglalnak le egy felügyelt halomból.
- Clr! JIT_New egy objektum lefoglalásakor lesz meghívva.
- Clr! JIT_Newarr1 egy objektumtömb lefoglalásakor lesz meghívva.
Ez a két függvény általában gyorsan működik. Ha clr! JIT_New vagy clr! JIT_Newarr1 időt vesz igénybe az idővonalon, előfordulhat, hogy a kód sok objektumot lefoglal, és jelentős mennyiségű memóriát használ fel.
Kód betöltése (clr! ThePreStub)
Clr! APreStub egy segédfüggvény a .NET-keretrendszer, amely előkészíti a kódot a kezdeti végrehajtáshoz, amely általában igény szerinti (JIT) fordítást tartalmaz. Minden C#-metódushoz a clr! APreStub legfeljebb egyszer hívható meg egy folyamat során.
Ha clr! APreStub több időt vesz igénybe egy kérés esetében, ez az első kérés a metódus végrehajtásához. A .NET-keretrendszer futásideje jelentős időt vesz igénybe az első metódus betöltéséhez. Megfontolandó szempontok:
- Olyan bemelegítési folyamat használata, amely végrehajtja a kód azon részét, mielőtt a felhasználók hozzáférnek.
- Natív képgenerátor (ngen.exe) futtatása a szerelvényeken.
A versengés zárolása (clr! JITutil_MonContention vagy clr! JITutil_MonEnterWorker)
Clr! JITutil_MonContention vagy clr! JITutil_MonEnterWorker jelzi, hogy az aktuális szál a zárolás feloldására vár. Ez a szöveg gyakran jelenik meg a következő esetekben:
- C# LOCK utasítás végrehajtása,
- A Monitor.Enter metódus meghívása vagy
- Metódus meghívása a MethodImplOptions.Szinkronizált attribútummal.
A zárolási versengés általában akkor fordul elő, ha az A szál egy zárolást szerez be, és a B szál megpróbálja megszerezni ugyanazt a zárolást, mielőtt az A szál feloldja azt.
Kód betöltése ([COLD])
Ha a .NET-keretrendszer futtatókörnyezet először nem optimális kódot hajt végre, a metódus neve a [COLD] nevet fogja tartalmazni:
mscorlib.ni![COLD]System.Reflection.CustomAttribute.IsDefined
Az egyes metódusok esetében legfeljebb egyszer jelenik meg a folyamat során.
Ha a kód betöltése jelentős időt vesz igénybe egy kérés esetében, a kérés a metódus nem optimális részének végrehajtását kezdeményezi. Érdemes lehet olyan bemelegítési folyamatot használni, amely végrehajtja a kód azon részét, mielőtt a felhasználók hozzáférnek.
HTTP-kérés küldése
Az olyan metódusok, mint a HttpClient.Send , azt jelzik, hogy a kód egy HTTP-kérés befejezésére vár.
Adatbázis-művelet
Az olyan metódusok, mint az SqlCommand.Execute , azt jelzik, hogy a kód egy adatbázis-művelet befejezésére vár.
Várakozás (AWAIT_TIME)
AWAIT_TIME azt jelzi, hogy a kód egy másik tevékenység befejezésére vár. Ez a késés a C# AWAIT utasítással történik. Ha a kód C# AWAIT függvényt ad meg:
- A szál visszateker, és visszairányítja a vezérlőt a szálkészletbe.
- Nincs blokkolt szál, amely a AWAIT befejezésére vár.
Logikailag azonban a AWAIT-et tartalmazó szál "le van tiltva", és a művelet befejezésére vár. A AWAIT_TIME utasítás a blokkolt időt jelzi, és a tevékenység befejezésére vár.
Ha úgy tűnik, hogy a AWAIT_TIME a kód helyett a keretrendszer kódjában van, a .NET Profiler a következő módon jelenhet meg:
- A AWAIT végrehajtásához használt keretrendszerkód
- A AWAIT telemetriai adatainak rögzítéséhez használt kód
A keretrendszer függőségeinek jelölőnégyzetét a lap tetején törölheti, ha csak a kódot szeretné megjeleníteni, és így könnyebben láthatja, hogy a AWAIT honnan származik.
Letiltott idő
BLOCKED_TIME azt jelzi, hogy a kód egy másik erőforrásra vár. Előfordulhat például, hogy a következőre vár:
- Szinkronizálási objektum
- Elérhető szál
- Befejezési kérelem
Nem felügyelt Async
Ahhoz, hogy az aszinkron hívások nyomon követhetők legyenek a szálak között, .NET-keretrendszer ETW-eseményeket bocsát ki, és tevékenységazonosítókat ad át a szálak között. Mivel a nem felügyelt (natív) kód és az aszinkron kód néhány régebbi stílusa nem rendelkezik ilyen eseményekkel és tevékenységazonosítókkal, a .NET Profiler nem tudja nyomon követni a szálon futó szálat és függvényeket. Ez az elem nem felügyelt Async címkével van ellátva a hívásveremben. Töltse le az ETW-fájlt a PerfView használatához további elemzésekhez.
Processzoridő
A processzor az utasítások végrehajtásával van elfoglalva.
Lemezidő
Az alkalmazás lemezműveleteket hajt végre.
Hálózati idő
Az alkalmazás hálózati műveleteket hajt végre.
Amikor az oszlop
A Mikor oszlop egy csomóponthoz gyűjtött befogadó minták sokféleségének vizualizációja. A kérelem teljes tartománya 32 időgyűjtőre van osztva, ahol a csomópont befogadó mintái halmozódnak fel. Minden gyűjtő sávként jelenik meg. A sáv magassága skálázott értéket jelöl. A következő csomópontok esetében a sáv az egyik erőforrás használatát jelöli a gyűjtő alatt:
- A CPU_TIME vagy BLOCKED_TIME megjelölt csomópontok.
- Az erőforrások (például processzor, lemez vagy szál) felhasználásával nyilvánvaló kapcsolattal rendelkező csomópontok.
Ezekben a metrikákban több erőforrás használatával 100%-nál nagyobb értéket kaphat. Ha például átlagosan két CPU-t használ egy intervallumban, 200%-ot kap.
Következő lépések
Ismerje meg, hogyan...