Share via


Alkalmazás Elemzések Profiler-adatok megtekintése

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 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 Profilert, 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:

  1. Az Azure-szolgáltatás Alkalmazás Elemzések áttekintési lapján válassza a Bal oldali menü Teljesítmény elemét.

  2. A Teljesítmény panelen válassza a Profiler lehetőséget a Profiler beállításainak felső menüjében.

    Screenshot of the Profiler button from the Performance pane.

  3. A Profilkészítő beállításai lap betöltése után válassza a Profil most lehetőséget.

    Screenshot of Profiler page features and settings.

Nyomkövetések megtekintése

  1. A Profiler-munkamenetek futtatása után térjen vissza a Teljesítmény panelre.

  2. A Részletezés... területen válassza a Profiler-nyomkövetések lehetőséget a nyomkövetések megtekintéséhez.

    Screenshot of trace explorer page.

A nyomkövetési kezelő a következő információkat jeleníti meg:

Filter 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 Profiler mintavételezési módszerek és rendszerezés kombinációjával elemzi az alkalmazás teljesítményét. A részletes gyűjtemény végrehajtása során a 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. Consider:

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

További lépések

Ismerje meg, hogyan...