Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Monitorování prostředků domény aplikace (ARM) umožňuje hostitelům monitorovat využití procesoru a paměti podle domény aplikace. To je užitečné pro hostitele, jako je ASP.NET, které používají mnoho domén aplikace v dlouhotrvajícím procesu. Hostitel může uvolnit doménu aplikace aplikace, která nepříznivě ovlivňuje výkon celého procesu, ale pouze v případě, že dokáže identifikovat problematickou aplikaci. ARM poskytuje informace, které je možné použít k usnadnění při rozhodování.
Například hostitelská služba může mít mnoho aplikací spuštěných na ASP.NET serveru. Pokud jedna aplikace v procesu začne spotřebovávat příliš mnoho paměti nebo příliš mnoho času procesoru, může hostitelská služba použít ARM k identifikaci domény aplikace, která problém způsobuje.
ARM je dostatečně jednoduché pro použití v živých aplikacích. K informacím můžete přistupovat pomocí trasování událostí pro Windows (ETW) nebo přímo prostřednictvím spravovaných nebo nativních rozhraní API.
Povolení monitorování prostředků
ARM je možné povolit čtyřmi způsoby: poskytnutím konfiguračního souboru při spuštění modulu CLR (Common Language Runtime), pomocí nespravovaného hostitelského rozhraní API, pomocí spravovaného kódu, nebo nasloucháním událostem ETW ARM.
Jakmile je ARM povolený, začne shromažďovat data ve všech doménách aplikace v procesu. Pokud byla doména aplikace vytvořena před povolením ARM, spustí se kumulativní data při povolení ARM, ne při vytvoření domény aplikace. Po povolení se ARM nedá zakázat.
ARM můžete povolit při spuštění CLR přidáním elementu< appDomainResourceMonitoring> do konfiguračního souboru a nastavením atributu
enabled
natrue
. Hodnotafalse
(výchozí) znamená, že arm není při spuštění povolené. Později ji můžete aktivovat pomocí některého z dalších aktivačních mechanismů.Hostitel může povolit ARM vyžádáním hostitelského rozhraní ICLRAppDomainResourceMonitor . Jakmile se toto rozhraní úspěšně získá, povolí se ARM.
Spravovaný kód může povolit ARM nastavením statické vlastnosti (
Shared
v jazyce Visual Basic) AppDomain.MonitoringIsEnabled natrue
hodnotu. Jakmile je vlastnost nastavená, JE ARM povolena.Arm můžete povolit po spuštění sledováním událostí ETW (Trasování událostí pro Windows). ARM je povoleno a začne vyvolávat události pro všechny domény aplikace, když povolíte veřejného poskytovatele
Microsoft-Windows-DotNETRuntime
pomocíAppDomainResourceManagementKeyword
klíčového slova. Pokud chcete korelovat data s doménami aplikací a vlákny, musíte také povolit poskytovateleMicrosoft-Windows-DotNETRuntimeRundown
s klíčovým slovemThreadingKeyword
.
Použití ARM
ARM poskytuje celkový čas procesoru používaný doménou aplikace a tři druhy informací o využití paměti.
Celková doba procesoru pro doménu aplikace v sekundách: Vypočítá se tak, že se sečte časy vláken hlášené operačním systémem pro všechna vlákna, která strávila časem prováděním v doméně aplikace během své životnosti. Blokované nebo spící vlákna nepoužívají čas procesoru. Při volání vlákna do nativního kódu je doba, po kterou vlákno stráví v nativním kódu, zahrnuta do počtu pro doménu aplikace, kde bylo volání provedeno.
Vlastnost spravovaného rozhraní API: AppDomain.MonitoringTotalProcessorTime
Rozhraní API pro hostování: ICLRAppDomainResourceMonitor::GetCurrentCpuTime – metoda.
Události ETW:
ThreadCreated
,ThreadAppDomainEnter
, aThreadTerminated
události. Informace o zprostředkovatelích a klíčových slovech najdete v "Události monitorování prostředků AppDomain" v Události CLR ETW.
Celkové spravované přidělení provedené doménou aplikace během své životnosti v bajtech: Celkové přidělení neodráží vždy využití paměti doménou aplikace, protože přidělené objekty můžou být krátkodobé. Pokud ale aplikace přidělí a uvolní obrovský počet objektů, mohou být náklady na přidělení významné.
Vlastnost spravovaného rozhraní API: AppDomain.MonitoringTotalAllocatedMemorySize
Rozhraní API pro hostování: ICLRAppDomainResourceMonitor::GetCurrentAllocated – metoda.
Události ETW:
AppDomainMemAllocated
událost,Allocated
pole.
Spravovaná paměť v bajtech, na kterou odkazuje doména aplikace a která přežila nejnovější úplnou blokující kolekci: Toto číslo je přesné až po úplné blokující kolekci. (To je na rozdíl od souběžných kolekcí, ke kterým dochází na pozadí a neblokují aplikaci.) Přetížení metody například GC.Collect() způsobí úplné blokování kolekce.
Vlastnost spravovaného rozhraní API: AppDomain.MonitoringSurvivedMemorySize
Rozhraní API pro hostování: ICLRAppDomainResourceMonitor::GetCurrentSurvived – metoda,
pAppDomainBytesSurvived
parametr.Události ETW:
AppDomainMemSurvived
událost,Survived
pole.
Celková spravovaná paměť v bajtech, na kterou odkazuje proces a která přežila nejnovější blokující úplnou kolekci: Přežívající paměť pro jednotlivé aplikační domény se dá porovnat s tímto číslem.
Vlastnost spravovaného rozhraní API: AppDomain.MonitoringSurvivedProcessMemorySize
Rozhraní API pro hostování: ICLRAppDomainResourceMonitor::GetCurrentSurvived – metoda,
pTotalBytesSurvived
parametr.Události ETW:
AppDomainMemSurvived
událost,ProcessSurvived
pole.
Určení, kdy dojde k úplnému blokování kolekce
Pokud chcete zjistit, kdy jsou počty přeživší paměti přesné, potřebujete vědět, kdy došlo k úplnému blokování kolekce. Tato metoda závisí na rozhraní API, které používáte k prozkoumání statistik ARM.
Spravované rozhraní API
Pokud používáte vlastnosti AppDomain třídy, můžete použít metodu GC.RegisterForFullGCNotification k registraci pro oznámení úplných kolekcí. Prahová hodnota, kterou použijete, není důležitá, protože čekáte na dokončení kolekce, spíše než na její blížení se. Pak můžete zavolat metodu GC.WaitForFullGCComplete, která zastaví, dokud není dokončen úplný sběr. Můžete vytvořit vlákno, které volá metodu v cyklu a provede jakoukoli potřebnou analýzu vždy, když se metoda dokončí.
Případně můžete metodu GC.CollectionCount volat pravidelně, abyste zjistili, jestli se zvýšil počet kolekcí generace 2. V závislosti na frekvenci dotazování nemusí tato technika poskytovat tak přesnou informaci o výskytu úplné kolekce.
Hostování API
Pokud používáte nespravované hostitelské rozhraní API, musí váš hostitel předat CLR implementaci rozhraní IHostGCManager. Metoda IHostGCManager::SuspensionEnding volá CLR, když obnoví provádění vláken, které byly pozastaveny v době, kdy dojde ke sběru. CLR předá generování dokončené kolekce jako parametr metody, aby hostitel mohl určit, jestli byla kolekce úplná nebo částečná. Vaše implementace metody IHostGCManager::SuspensionEnding může dotazovat přeživou paměť, aby se zajistilo to, že počet je získán, jakmile bude aktualizován.
Viz také
- AppDomain.MonitoringIsEnabled
- Rozhraní ICLRAppDomainResourceMonitor
- <appDomainResourceMonitoring>
- událostí pro Windows
CLR pro Windows