Liczniki wydajności programu WCF

Program Windows Communication Foundation (WCF) zawiera duży zestaw liczników wydajności, które ułatwiają ocenę wydajności aplikacji.

Włączanie liczników wydajności

Liczniki wydajności dla usługi WCF można włączyć za pomocą pliku konfiguracji app.config usługi WCF w następujący sposób:

<configuration>  
    <system.serviceModel>  
        <diagnostics performanceCounters="All" />  
    </system.serviceModel>  
</configuration>  

Atrybut performanceCounters można ustawić tak, aby włączyć określony typ liczników wydajności. Prawidłowe wartości to

  • Wszystkie: są włączone wszystkie liczniki kategorii (ServiceModelService, ServiceModelEndpoint i ServiceModelOperation).

  • ServiceOnly: włączone są tylko liczniki kategorii ServiceModelService. Jest to wartość domyślna.

  • Wyłączone: liczniki wydajności usługi ServiceModel* są wyłączone.

Jeśli chcesz włączyć liczniki wydajności dla wszystkich aplikacji WCF, możesz umieścić ustawienia konfiguracji w pliku Machine.config. Aby uzyskać więcej informacji na temat konfigurowania wystarczającej ilości pamięci dla liczników wydajności na maszynie, zobacz sekcję Zwiększanie rozmiaru pamięci dla liczników wydajności poniżej.

Jeśli używasz punktów rozszerzalności programu WCF, takich jak wywołania operacji niestandardowych, należy również emitować własne liczniki wydajności. Dzieje się tak, ponieważ w przypadku zaimplementowania punktu rozszerzalności program WCF może już nie emitować standardowych danych licznika wydajności w ścieżce domyślnej. Jeśli nie zaimplementujesz ręcznej obsługi licznika wydajności, możesz nie zobaczyć oczekiwanych danych licznika wydajności.

Możesz również włączyć liczniki wydajności w kodzie w następujący sposób:

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();  

Wyświetlanie danych wydajności

Aby wyświetlić dane przechwycone przez liczniki wydajności, możesz użyć monitor wydajności (Perfmon.exe) dostarczanej z systemem Windows. Możesz uruchomić to narzędzie, przechodząc do menu Start, a następnie kliknij przycisk Uruchom i wpisz perfmon.exe polecenie w oknie dialogowym.

Uwaga

Wystąpienia licznika wydajności mogą zostać wydane przed przetworzeniem ostatnich komunikatów przez dyspozytor punktu końcowego. Może to spowodować, że dane wydajności nie są przechwytywane dla kilku komunikatów.

Zwiększanie rozmiaru pamięci dla liczników wydajności

WCF używa oddzielnej pamięci udostępnionej dla kategorii liczników wydajności.

Domyślnie oddzielna pamięć udostępniona jest ustawiona na jedną czwartą rozmiaru globalnej pamięci licznika wydajności. Domyślna pamięć globalnego licznika wydajności to 524 288 bajtów. W związku z tym trzy kategorie liczników wydajności programu WCF mają domyślny rozmiar około 128 KB każdy. W zależności od właściwości środowiska uruchomieniowego aplikacji WCF na maszynie pamięć licznika wydajności może zostać wyczerpana. W takim przypadku program WCF zapisuje błąd w dzienniku zdarzeń aplikacji. Zawartość błędu wskazuje, że licznik wydajności nie został załadowany, a wpis zawiera wyjątek "System.InvalidOperationException: Widok pliku liczników niestandardowych jest poza pamięcią". Jeśli śledzenie jest włączone na poziomie błędu, ten błąd jest również śledzony. Jeśli pamięć licznika wydajności zostanie wyczerpana, kontynuowanie uruchamiania aplikacji WCF z włączonymi licznikami wydajności może spowodować obniżenie wydajności. Jeśli jesteś administratorem maszyny, należy skonfigurować ją tak, aby przydzieliła wystarczającą ilość pamięci do obsługi maksymalnej liczby liczników wydajności, które mogą istnieć w dowolnym momencie.

Możesz zmienić ilość pamięci licznika wydajności dla kategorii WCF w rejestrze. W tym celu należy dodać nową wartość DWORD o nazwie FileMappingSize do trzech następujących lokalizacji i ustawić ją na żądaną wartość w bajtach. Uruchom ponownie maszynę, aby te zmiany zostały wprowadzone.

  • 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

Gdy duża liczba obiektów (na przykład ServiceHost) zostanie usunięta, ale czeka na usunięcie pamięci, PrivateBytes licznik wydajności zarejestruje niezwykle dużą liczbę. Aby rozwiązać ten problem, możesz dodać własne liczniki specyficzne dla aplikacji lub użyć atrybutu performanceCounters , aby włączyć tylko liczniki na poziomie usługi.

Typy liczników wydajności

Liczniki wydajności są ograniczone do trzech różnych poziomów: usługa, punkt końcowy i operacja.

Za pomocą usługi WMI można pobrać nazwę wystąpienia licznika wydajności. Przykład:

  • Nazwę wystąpienia licznika usługi można uzyskać za pomocą właściwości "CounterInstanceName" wystąpienia usługi WMI.

  • Nazwę wystąpienia licznika punktu końcowego można uzyskać za pomocą właściwości "CounterInstanceName" wystąpienia punktu końcowego usługi WMI.

  • Nazwę wystąpienia licznika operacji można uzyskać za pomocą metody "GetOperationCounterInstanceName" wystąpienia punktu końcowego usługi WMI.

Aby uzyskać więcej informacji na temat usługi WMI, zobacz Using Windows Management Instrumentation for Diagnostics (Używanie instrumentacji zarządzania Windows do diagnostyki).

Liczniki wydajności usługi

Liczniki wydajności usługi mierzą zachowanie usługi jako całość i mogą służyć do diagnozowania wydajności całej usługi. Można je znaleźć w obiekcie wydajności podczas wyświetlania ServiceModelService 4.0.0.0 przy użyciu monitor wydajności. Wystąpienia są nazwane przy użyciu następującego wzorca:

ServiceName@ServiceBaseAddress

Licznik w zakresie usługi jest agregowany z licznika w kolekcji punktów końcowych.

Liczniki wydajności tworzenia wystąpienia usługi są zwiększane po utworzeniu nowego elementu InstanceContext. Pamiętaj, że nowy element InstanceContext jest tworzony nawet wtedy, gdy otrzymujesz komunikat nieaktywujący (z istniejącą usługą) lub podczas nawiązywania połączenia z wystąpieniem z jednej sesji, zakończ sesję, a następnie ponownie nawiąż połączenie z innej sesji.

Liczniki wydajności punktu końcowego

Liczniki wydajności punktu końcowego umożliwiają przyjrzenie się danym odzwierciedlający sposób akceptowania komunikatów przez punkt końcowy. Można je znaleźć w ServiceModelEndpoint 4.0.0.0 obiekcie wydajności podczas wyświetlania przy użyciu monitor wydajności. Wystąpienia są nazwane przy użyciu następującego wzorca:

(ServiceName).(ContractName)@(endpoint listener address)

Dane są podobne do danych zbieranych dla poszczególnych operacji, ale są agregowane tylko w punkcie końcowym.

Licznik w zakresie punktu końcowego jest agregowany z liczników w kolekcji operacji.

Uwaga

Jeśli dwa punkty końcowe mają identyczne nazwy kontraktów i adresy, są one mapowane na to samo wystąpienie licznika.

Liczniki wydajności operacji

Liczniki wydajności operacji znajdują się w ServiceModelOperation 4.0.0.0 obiekcie wydajności podczas wyświetlania za pomocą monitor wydajności. Każda operacja ma pojedyncze wystąpienie. Oznacza to, że jeśli dany kontrakt ma 10 operacji, z tym kontraktem jest skojarzonych 10 wystąpień licznika operacji. Wystąpienia obiektów są nazwane przy użyciu następującego wzorca:

(ServiceName).(ContractName).(OperationName)@(first endpoint listener address)

Ten licznik umożliwia mierzenie sposobu użycia wywołania i wydajności operacji.

Gdy liczniki są widoczne w wielu zakresach, dane zebrane z wyższego zakresu są agregowane przy użyciu danych z niższych zakresów. Na przykład Calls w punkcie końcowym reprezentuje sumę wszystkich wywołań operacji w punkcie końcowym; Calls w usłudze reprezentuje sumę wszystkich wywołań do wszystkich punktów końcowych w usłudze.

Uwaga

Jeśli masz zduplikowane nazwy operacji w kontrakcie, otrzymujesz tylko jedno wystąpienie licznika dla obu operacji.

Programowanie liczników wydajności programu WCF

Kilka plików jest zainstalowanych w folderze instalacji zestawu SDK, aby programowo uzyskać dostęp do liczników wydajności programu WCF. Te pliki są wymienione w następujący sposób:

  • _ServiceModelEndpointPerfCounters.vrg
  • _ServiceModelOperationPerfCounters.vrg
  • _ServiceModelServicePerfCounters.vrg
  • _SMSvcHostPerfCounters.vrg
  • _TransactionBridgePerfCounters.vrg

Aby uzyskać więcej informacji na temat programowego uzyskiwania dostępu do liczników, zobacz Architektura programowania liczników wydajności.

Zobacz też