Čítače výkonu WCF
Windows Communication Foundation (WCF) obsahuje velkou sadu čítačů výkonu, které vám pomůžou posoudit výkon vaší aplikace.
Povolení čítačů výkonu
Čítače výkonu pro službu WCF můžete povolit prostřednictvím konfiguračního souboru app.config služby WCF následujícím způsobem:
<configuration>
<system.serviceModel>
<diagnostics performanceCounters="All" />
</system.serviceModel>
</configuration>
Atribut performanceCounters
lze nastavit tak, aby povolil konkrétní typ čítačů výkonu. Platné hodnoty jsou
Vše: Jsou povoleny všechny čítače kategorií (ServiceModelService, ServiceModelEndpoint a ServiceModelOperation).
ServiceOnly: Jsou povoleny pouze čítače kategorií ServiceModelService. Tato hodnota je výchozí.
Vypnuto: Čítače výkonu ServiceModel* jsou zakázané.
Pokud chcete povolit čítače výkonu pro všechny aplikace WCF, můžete nastavení konfigurace umístit do souboru Machine.config. Další informace o konfiguraci dostatečné paměti pro čítače výkonu na vašem počítači najdete v části Zvýšení velikosti paměti pro čítače výkonu.
Pokud používáte body rozšiřitelnosti WCF, jako jsou například vyvolání vlastních operací, měli byste také generovat vlastní čítače výkonu. Důvodem je to, že pokud implementujete bod rozšiřitelnosti, wcf již nemusí generovat standardní data čítače výkonu ve výchozí cestě. Pokud neimplementujete podporu čítačů výkonu ručně, nemusí se zobrazit očekávaná data čítače výkonu.
V kódu můžete také povolit čítače výkonu následujícím způsobem:
using System.Configuration;
using System.ServiceModel.Configuration;
using System.ServiceModel.Diagnostics;
Configuration config = ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
ServiceModelSectionGroup sg = ServiceModelSectionGroup.GetSectionGroup(config);
sg.Diagnostic.PerformanceCounters = PerformanceCounterScope.All;
config.Save();
Zobrazení dat o výkonu
Pokud chcete zobrazit data zachycená čítači výkonu, můžete použít Sledování výkonu (Perfmon.exe), která je součástí Windows. Tento nástroj můžete spustit tak, že přejdete na Start a kliknete na Spustit a zadáte perfmon.exe
v dialogovém okně.
Poznámka:
Instance čítače výkonu mohou být vydány před posledním zpracováním zpráv dispečerem koncového bodu. To může vést k tomu, že se u několika zpráv nezachytí data o výkonu.
Zvýšení velikosti paměti pro čítače výkonu
WCF používá pro své kategorie čítačů výkonu samostatnou sdílenou paměť.
Ve výchozím nastavení je samostatná sdílená paměť nastavená na čtvrtinu globální paměti čítače výkonu. Výchozí globální paměť čítače výkonu je 524 288 bajtů. Proto tři kategorie čítačů výkonu WCF mají výchozí velikost přibližně 128 kB. V závislosti na charakteristikách modulu runtime aplikací WCF na počítači může dojít k vyčerpání paměti čítače výkonu. V takovém případě WCF zapíše do protokolu událostí aplikace chybu. Obsah chyby uvádí, že čítač výkonu nebyl načten a položka obsahuje výjimku System.InvalidOperationException: Zobrazení souboru vlastních čítačů je mimo paměť. Pokud je trasování povolené na úrovni chyby, je toto selhání také trasováno. Pokud dojde k vyčerpání paměti čítače výkonu, může pokračování ve spouštění aplikací WCF s povolenými čítači výkonu způsobit snížení výkonu. Pokud jste správcem počítače, měli byste ho nakonfigurovat tak, aby přidělil dostatek paměti pro podporu maximálního počtu čítačů výkonu, které mohou existovat kdykoli.
Můžete změnit množství paměti čítače výkonu pro kategorie WCF v registru. K tomu je potřeba přidat novou hodnotu DWORD pojmenovanou FileMappingSize
do tří následujících umístění a nastavit ji na požadovanou hodnotu v bajtech. Restartujte počítač, aby se tyto změny projevily.
HKLM\System\CurrentControlSet\Services\ServiceModelEndpoint 4.0.0.0\Performance
HKLM\System\CurrentControlSet\Services\ServiceModelOperation 4.0.0.0\Performance
HKLM\System\CurrentControlSet\Services\ServiceModelService 4.0.0.0\Performance
Pokud je uvolněn velký počet objektů (například ServiceHost), ale čeká na uvolnění paměti, čítač výkonu PrivateBytes
zaregistruje neobvykle vysoké číslo. Chcete-li tento problém vyřešit, můžete buď přidat vlastní čítače specifické pro aplikaci, nebo pomocí atributu performanceCounters
povolit pouze čítače na úrovni služby.
Typy čítačů výkonu
Čítače výkonu jsou vymezeny na tři různé úrovně: služba, koncový bod a operace.
Pomocí rozhraní WMI můžete načíst název instance čítače výkonu. Příklad:
Název instance čítače služby lze získat prostřednictvím vlastnosti CounterInstanceName instance služby WMI.
Název instance čítače koncového bodu lze získat prostřednictvím vlastnosti CounterInstanceName instance koncového bodu služby WMI.
Název instance čítače operace lze získat prostřednictvím metody GetOperationCounterInstanceName instance koncového bodu služby WMI.
Další informace o rozhraní WMI naleznete v tématu Použití nástroje Windows Management Instrumentation pro diagnostiku.
Čítače výkonu služby
Čítače výkonu služby měří chování služby jako celek a lze je použít k diagnostice výkonu celé služby. Při prohlížení pomocí Sledování výkonu je možné je najít pod objektem ServiceModelService 4.0.0.0
výkonu. Instance jsou pojmenované pomocí následujícího vzoru:
ServiceName@ServiceBaseAddress
Čítač v oboru služby se agreguje z čítače v kolekci koncových bodů.
Čítače výkonu pro vytvoření instance služby se při vytvoření nové instanceContext zvýší. Všimněte si, že se vytvoří nová instanceContext, i když obdržíte zprávu, která se neaktivuje (s existující službou), nebo když se připojíte k instanci z jedné relace, ukončete relaci a pak se znovu připojíte z jiné relace.
Čítače výkonu koncového bodu
Čítače výkonu koncových bodů umožňují podívat se na data, která odrážejí, jak koncový bod přijímá zprávy. Při prohlížení pomocí Sledování výkonu je možné je najít pod objektem ServiceModelEndpoint 4.0.0.0
výkonu. Instance jsou pojmenované pomocí následujícího vzoru:
(ServiceName).(ContractName)@(endpoint listener address)
Data jsou podobná tomu, co se shromažďují pro jednotlivé operace, ale agregují se pouze napříč koncovým bodem.
Čítač v oboru koncového bodu se agreguje z čítačů v kolekci operací.
Poznámka:
Pokud mají dva koncové body identické názvy a adresy kontraktů, mapují se na stejnou instanci čítače.
Čítače výkonu operací
Čítače výkonu operací jsou při prohlížení s Sledování výkonu nalezeny v objektu ServiceModelOperation 4.0.0.0
výkonu. Každá operace má každou instanci. To znamená, že pokud má daný kontrakt 10 operací, 10 instancí čítačů operací jsou přidruženy k této smlouvě. Instance objektů jsou pojmenovány pomocí následujícího vzoru:
(ServiceName).(ContractName).(OperationName)@(first endpoint listener address)
Tento čítač umožňuje měřit, jak se volání používá a jak dobře operace funguje.
Pokud jsou čítače viditelné v několika oborech, data shromážděná z vyššího oboru se agregují s daty z nižších oborů. Například Calls
na koncovém bodu představuje součet všech volání operací v rámci koncového bodu; Calls
ve službě představuje součet všech volání do všech koncových bodů v rámci služby.
Poznámka:
Pokud máte v kontraktu duplicitní názvy operací, získáte pouze jednu instanci čítače pro obě operace.
Programování čítačů výkonu WCF
V instalační složce sady SDK je nainstalováno několik souborů, abyste mohli programově přistupovat k čítačům výkonu WCF. Tyto soubory jsou uvedeny takto:
- _ServiceModelEndpointPerfCounters.vrg
- _ServiceModelOperationPerfCounters.vrg
- _ServiceModelServicePerfCounters.vrg
- _SMSvcHostPerfCounters.vrg
- _TransactionBridgePerfCounters.vrg
Další informace o přístupu k čítačům prostřednictvím kódu programu naleznete v tématu Architektura programování čítačů výkonu.