Alkalmazástartomány erőforrás-monitorozása
Az alkalmazástartomány erőforrás-monitorozása (ARM) lehetővé teszi, hogy a gazdagépek alkalmazástartományonként monitorozzák a processzor- és memóriahasználatot. Ez olyan gazdagépek esetében hasznos, mint például a ASP.NET, amelyek hosszú ideig futó folyamat során számos alkalmazástartományt használnak. A gazdagép eltávolíthatja egy olyan alkalmazás alkalmazástartományát, amely hátrányosan befolyásolja a teljes folyamat teljesítményét, de csak akkor, ha képes azonosítani a problémás alkalmazást. Az ARM olyan információkat nyújt, amelyek felhasználhatók az ilyen döntések meghozatalához.
Egy üzemeltetési szolgáltatás például számos alkalmazással rendelkezhet, amelyek egy ASP.NET kiszolgálón futnak. Ha a folyamat egyik alkalmazása túl sok memóriát vagy túl sok processzoridőt kezd el használni, az üzemeltetési szolgáltatás arm használatával azonosíthatja a problémát okozó alkalmazástartományt.
Az ARM elég könnyű az élő alkalmazásokban való használathoz. Az információkhoz a Windows (ETW) eseménykövetésével vagy közvetlenül felügyelt vagy natív API-kkal férhet hozzá.
Erőforrás-figyelés engedélyezése
Az ARM négy módon engedélyezhető: egy konfigurációs fájl megadásával a közös nyelvi futtatókörnyezet (CLR) indításakor, nem felügyelt üzemeltetési API használatával, felügyelt kód használatával vagy ARM ETW-események figyelésével.
Amint az ARM engedélyezve van, megkezdi az adatok gyűjtését a folyamat összes alkalmazástartományán. Ha egy alkalmazástartományt az ARM engedélyezése előtt hoztak létre, az összesítő adatok az ARM engedélyezésekor kezdődnek, nem pedig az alkalmazástartomány létrehozásakor. Ha engedélyezve van, az ARM nem tiltható le.
A CLR indításakor engedélyezheti az ARM-t úgy, hogy hozzáadja az <appDomainResourceMonitoring> elemet a konfigurációs fájlhoz, és az attribútumot a
enabled
következőretrue
állítja. Az (alapértelmezett) értékfalse
csak azt jelenti, hogy az ARM nincs engedélyezve indításkor; később a többi aktiválási mechanizmus egyikével aktiválhatja.A gazdagép az ICLRAppDomainResourceMonitor üzemeltetési felület kérésével engedélyezheti az ARM-t. A felület sikeres beszerzése után az ARM engedélyezve lesz.
A felügyelt kód a statikus (
Shared
Visual Basic) AppDomain.MonitoringIsEnabled tulajdonságtrue
beállításával engedélyezheti az ARM-t. A tulajdonság beállítása után az ARM engedélyezve van.Az ARM az indítás után ETW-események figyelésével engedélyezhető. Az ARM engedélyezve van, és elkezd eseményeket emelni az összes alkalmazástartományban, amikor a kulcsszó használatával engedélyezi a nyilvános szolgáltatót
Microsoft-Windows-DotNETRuntime
AppDomainResourceManagementKeyword
. Az adatok alkalmazástartományokkal és -szálakkal való korrelálásához engedélyeznie kell a szolgáltatótMicrosoft-Windows-DotNETRuntimeRundown
is aThreadingKeyword
kulcsszóval.
ARM használata
Az ARM az alkalmazástartomány által használt teljes processzoridőt és háromféle információt biztosít a memóriahasználatról.
Egy alkalmazástartomány teljes processzorideje másodpercben: Ezt úgy számítjuk ki, hogy összeadja az operációs rendszer által jelentett szálidőket az összes olyan szálhoz, amely az alkalmazástartományban való végrehajtással töltött időt az élettartama során. A blokkolt vagy alvó szálak nem használnak processzoridőt. Ha egy szál natív kódba hív, a szál natív kódban töltött idejét annak az alkalmazástartománynak a száma tartalmazza, ahol a hívást kezdeményezték.
Felügyelt API: AppDomain.MonitoringTotalProcessorTime tulajdonság.
Hosting API: ICLRAppDomainResourceMonitor::GetCurrentCpuTime metódus.
ETW-események:
ThreadCreated
,ThreadAppDomainEnter
ésThreadTerminated
események. A szolgáltatókról és kulcsszavakról az "AppDomain Resource Monitoring Events" (AppDomain-erőforrásfigyelési események) című témakörben olvashat a CLR ETW-eseményekben.
Egy alkalmazástartomány által az élettartama során végrehajtott összes felügyelt foglalás bájtban: Az összes foglalás nem mindig tükrözi az alkalmazástartomány memóriahasználatát, mert a lefoglalt objektumok rövid élettartamúak lehetnek. Ha azonban egy alkalmazás rengeteg objektumot foglal le és szabadít fel, a foglalások költsége jelentős lehet.
Felügyelt API: AppDomain.MonitoringTotalAllocatedMemorySize tulajdonság.
Hosting API: ICLRAppDomainResourceMonitor::GetCurrentAllocated metódus.
ETW-események:
AppDomainMemAllocated
esemény,Allocated
mező.
Felügyelt memória bájtban, amelyet egy alkalmazástartomány hivatkozik, és amely túlélte a legutóbbi teljes, blokkoló gyűjteményt: Ez a szám csak a teljes, blokkoló gyűjtemény után pontos. (Ez ellentétben áll az egyidejű gyűjteményekkel, amelyek a háttérben fordulnak elő, és nem tiltják le az alkalmazást.) A metódus túlterhelése GC.Collect() például teljes, blokkoló gyűjteményt okoz.
Felügyelt API: AppDomain.MonitoringSurvivedMemorySize tulajdonság.
Hosting API: ICLRAppDomainResourceMonitor::GetCurrentCam metódus,
pAppDomainBytesSurvived
paraméter.ETW-események:
AppDomainMemSurvived
esemény,Survived
mező.
A folyamat által hivatkozott és a legutóbbi teljes, blokkoló gyűjteményt túlélt felügyelt memória bájtban kifejezve: Az egyes alkalmazástartományok túlélt memóriája összehasonlítható ezzel a számmal.
Felügyelt API: AppDomain.MonitoringSurvivedProcessMemorySize tulajdonság.
Hosting API: ICLRAppDomainResourceMonitor::GetCurrentCam metódus,
pTotalBytesSurvived
paraméter.ETW-események:
AppDomainMemSurvived
esemény,ProcessSurvived
mező.
Annak meghatározása, hogy mikor történik meg a teljes, blokkoló gyűjtemény
Annak megállapításához, hogy a túlélt memória száma mikor pontos, tudnia kell, hogy mikor történt meg a teljes, blokkoló gyűjtemény. Ennek módja az ARM-statisztikák vizsgálatához használt API-tól függ.
Felügyelt API
Ha az AppDomain osztály tulajdonságait használja, a GC.RegisterForFullGCNotification metódus használatával regisztrálhat a teljes gyűjtemények értesítésére. A használt küszöbérték nem fontos, mert nem a gyűjtemény megközelítésére, hanem a gyűjtemény befejezésére vár. Ezután meghívhatja a metódust GC.WaitForFullGCComplete , amely letiltja a teljes gyűjtemény befejezését. Létrehozhat egy szálat, amely ciklusban hívja meg a metódust, és elvégzi a szükséges elemzéseket, amikor a metódus visszatér.
Azt is megteheti, hogy rendszeresen meghívja a GC.CollectionCount metódust, hogy megállapítsa, nőtt-e a 2. generációs gyűjtemények száma. A lekérdezés gyakoriságától függően előfordulhat, hogy ez a technika nem nyújt olyan pontos jelzést a teljes gyűjtemény előfordulására.
Az API üzemeltetése
Ha a nem felügyelt üzemeltetési API-t használja, a gazdagépnek át kell adnia a CLR-nek az IHostGCManager felület implementációját. A CLR meghívja az IHostGCManager::SuspensionEnding metódust, amikor folytatja a gyűjtemény során felfüggesztett szálak végrehajtását. A CLR a metódus paramétereként átadja a befejezett gyűjtemény generálását, így a gazdagép meg tudja állapítani, hogy a gyűjtemény teljes vagy részleges volt-e. Az IHostGCManager::SuspensionEnding metódus végrehajtása lekérdezheti az túlélt memóriát, hogy a számokat a frissítés után azonnal lekérje a rendszer.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: