WCF-prestandaräknare
Windows Communication Foundation (WCF) innehåller en stor uppsättning prestandaräknare som hjälper dig att mäta programmets prestanda.
Aktivera prestandaräknare
Du kan aktivera prestandaräknare för en WCF-tjänst via konfigurationsfilen app.config för WCF-tjänsten på följande sätt:
<configuration>
<system.serviceModel>
<diagnostics performanceCounters="All" />
</system.serviceModel>
</configuration>
Attributet performanceCounters
kan anges för att aktivera en viss typ av prestandaräknare. Giltiga värden är
Alla: Alla kategoriräknare (ServiceModelService, ServiceModelEndpoint och ServiceModelOperation) är aktiverade.
ServiceOnly: Endast ServiceModelService-kategoriräknare är aktiverade. Detta är standardvärdet.
Av: ServiceModel* prestandaräknare är inaktiverade.
Om du vill aktivera prestandaräknare för alla WCF-program kan du placera konfigurationsinställningarna i filen Machine.config. Mer information om hur du konfigurerar tillräckligt med minne för prestandaräknare på datorn finns i avsnittet Öka minnesstorleken för prestandaräknare nedan.
Om du använder utökningspunkter för WCF, till exempel anropare för anpassade åtgärder, bör du också generera egna prestandaräknare. Det beror på att om du implementerar en utökningspunkt kanske WCF inte längre genererar standarddata för prestandaräknare i standardsökvägen. Om du inte implementerar stöd för manuella prestandaräknare kanske du inte ser de prestandaräknardata som du förväntar dig.
Du kan också aktivera prestandaräknare i koden enligt följande:
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();
Visa prestandadata
Om du vill visa data som samlas in av prestandaräknarna kan du använda prestandaövervakaren (Perfmon.exe) som medföljer Windows. Du kan starta det här verktyget genom att gå till Start och klicka på Kör och skriva perfmon.exe
i dialogrutan.
Kommentar
Prestandaräknarens instanser kan släppas innan de sista meddelandena har bearbetats av slutpunktsutskickaren. Detta kan leda till att prestandadata inte samlas in för några få meddelanden.
Öka minnesstorleken för prestandaräknare
WCF använder separat delat minne för sina prestandaräknarkategorier.
Som standard är separat delat minne inställt på en fjärdedel av storleken på det globala prestandaräknarens minne. Standardminnet för den globala prestandaräknaren är 524 288 byte. Därför har de tre kategorierna för WCF-prestandaräknare en standardstorlek på cirka 128 KB vardera. Beroende på körningsegenskaperna för WCF-programmen på en dator kan prestandaräknarens minne vara förbrukat. När detta inträffar skriver WCF ett fel till programhändelseloggen. Innehållet i felet anger att en prestandaräknare inte lästes in och posten innehåller undantaget "System.InvalidOperationException: Custom counters file view is out of memory" (System.InvalidOperationException: Custom counters file view is out of memory). Om spårning är aktiverat på felnivå spåras även det här felet. Om prestandaräknarminnet är slut kan det leda till prestandaförsämring om du fortsätter att köra dina WCF-program med aktiverade prestandaräknare. Om du är administratör för datorn bör du konfigurera den för att allokera tillräckligt med minne för att stödja det maximala antalet prestandaräknare som kan finnas när som helst.
Du kan ändra mängden minne för prestandaräknare för WCF-kategorier i registret. För att göra det måste du lägga till ett nytt DWORD-värde med namnet FileMappingSize
på de tre följande platserna och ange det till önskat värde i byte. Starta om datorn så att ändringarna träder i kraft.
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
När ett stort antal objekt (till exempel ServiceHost) tas bort men väntar på att bli skräpinsamlingar registrerar prestandaräknaren PrivateBytes
ett ovanligt högt antal. För att lösa det här problemet kan du antingen lägga till egna programspecifika räknare eller använda performanceCounters
attributet för att endast aktivera räknare på tjänstnivå.
Typer av prestandaräknare
Prestandaräknare är begränsade till tre olika nivåer: Tjänst, Slutpunkt och Åtgärd.
Du kan använda WMI för att hämta namnet på en prestandaräknareinstans. Exempel:
Tjänsträknarens instansnamn kan hämtas via WMI-tjänstinstansens egenskap "CounterInstanceName".
Slutpunktsräknarens instansnamn kan hämtas via WMI-slutpunktsinstansens egenskap "CounterInstanceName".
Instansnamnet för åtgärdsräknaren kan hämtas via WMI-slutpunktsinstansens metoden "GetOperationCounterInstanceName".
Mer information om WMI finns i Använda Windows Management Instrumentation för diagnostik.
Tjänstprestandaräknare
Tjänstprestandaräknare mäter tjänstbeteendet som helhet och kan användas för att diagnostisera prestanda för hela tjänsten. De finns under prestandaobjektet ServiceModelService 4.0.0.0
när du visar dem med Prestandaövervakaren. Instanserna namnges med hjälp av följande mönster:
ServiceName@ServiceBaseAddress
En räknare i ett tjänstomfång aggregeras från räknaren i en samling slutpunkter.
Prestandaräknare för att skapa tjänstinstanser ökas när en ny InstanceContext skapas. Observera att en ny InstanceContext skapas även när du får ett meddelande som inte aktiveras (med en befintlig tjänst) eller när du ansluter till en instans från en session, avslutar sessionen och återansluter sedan från en annan session.
Prestandaräknare för slutpunkter
Med slutpunktsprestandaräknare kan du titta på data som återspeglar hur en slutpunkt tar emot meddelanden. De finns under prestandaobjektet ServiceModelEndpoint 4.0.0.0
när du visar med hjälp av prestandaövervakaren. Instanserna namnges med hjälp av följande mönster:
(ServiceName).(ContractName)@(endpoint listener address)
Data liknar det som samlas in för enskilda åtgärder, men aggregeras bara över slutpunkten.
En räknare i ett slutpunktsomfång aggregeras från räknare i en samling åtgärder.
Kommentar
Om två slutpunkter har identiska kontraktnamn och adresser mappas de till samma räknarinstans.
Prestandaräknare för åtgärder
Prestandaräknare för åtgärder finns under prestandaobjektet ServiceModelOperation 4.0.0.0
när du visar med prestandaövervakaren. Varje åtgärd har en enskild instans. Om ett visst kontrakt har 10 åtgärder associeras alltså 10 åtgärdsräknare-instanser med det kontraktet. Objektinstanserna namnges med följande mönster:
(ServiceName).(ContractName).(OperationName)@(first endpoint listener address)
Med den här räknaren kan du mäta hur anropet används och hur bra åtgärden fungerar.
När räknare visas i flera omfång aggregeras data som samlats in från ett högre omfång med data från lägre omfång. Till exempel Calls
representerar en slutpunkt summan av alla åtgärdsanrop inom slutpunkten. Calls
Vid en tjänst representerar summan av alla anrop till alla slutpunkter i tjänsten.
Kommentar
Om du har duplicerade åtgärdsnamn i ett kontrakt får du bara en räknarinstans för båda åtgärderna.
Programmering av WCF-prestandaräknare
Flera filer installeras i SDK-installationsmappen så att du kan komma åt WCF-prestandaräknaren programmatiskt. Dessa filer visas på följande sätt:
- _ServiceModelEndpointPerfCounters.vrg
- _ServiceModelOperationPerfCounters.vrg
- _ServiceModelServicePerfCounters.vrg
- _SMSvcHostPerfCounters.vrg
- _TransactionBridgePerfCounters.vrg
Mer information om hur du kommer åt räknarna programmatiskt finns i Programmeringsarkitektur för prestandaräknare.