Partilhar via


Contadores de desempenho WCF

O Windows Communication Foundation (WCF) inclui um grande conjunto de contadores de desempenho para ajudá-lo a avaliar o desempenho do seu aplicativo.

Habilitando contadores de desempenho

Você pode habilitar contadores de desempenho para um serviço WCF por meio do arquivo de configuração app.config do serviço WCF da seguinte maneira:

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

O performanceCounters atributo pode ser definido para habilitar um tipo específico de contadores de desempenho. Os valores válidos são

  • Todos: Todos os contadores de categoria (ServiceModelService, ServiceModelEndpoint e ServiceModelOperation) estão habilitados.

  • ServiceOnly: Somente os contadores de categoria ServiceModelService estão habilitados. Este é o valor predefinido.

  • Desativado: os contadores de desempenho ServiceModel* estão desativados.

Se você quiser habilitar contadores de desempenho para todos os aplicativos WCF, você pode colocar as definições de configuração no arquivo Machine.config. Consulte a seção Aumentando o tamanho da memória para contadores de desempenho abaixo para obter mais informações sobre como configurar memória suficiente para contadores de desempenho em sua máquina.

Se você usar pontos de extensibilidade do WCF, como invocadores de operação personalizados, também deverá emitir seus próprios contadores de desempenho. Isso ocorre porque se você implementar um ponto de extensibilidade, o WCF não poderá mais emitir os dados do contador de desempenho padrão no caminho padrão. Se você não implementar o suporte manual ao contador de desempenho, talvez não veja os dados esperados do contador de desempenho.

Você também pode habilitar contadores de desempenho em seu código da seguinte maneira,

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

Visualizando dados de desempenho

Para exibir dados capturados pelos contadores de desempenho, você pode usar o Monitor de Desempenho (Perfmon.exe) que vem com o Windows. Você pode iniciar essa ferramenta indo para Iniciar, clique em Executar e digite perfmon.exe na caixa de diálogo.

Nota

As instâncias do contador de desempenho podem ser liberadas antes que as últimas mensagens tenham sido processadas pelo dispatcher do ponto de extremidade. Isso pode fazer com que os dados de desempenho não sejam capturados para algumas mensagens.

Aumentando o tamanho da memória para contadores de desempenho

O WCF usa memória compartilhada separada para suas categorias de contador de desempenho.

Por padrão, a memória compartilhada separada é definida como um quarto do tamanho da memória do contador de desempenho global. A memória padrão do contador de desempenho global é de 524.288 bytes. Portanto, as três categorias de contador de desempenho WCF têm um tamanho padrão de aproximadamente 128KB cada. Dependendo das características de tempo de execução dos aplicativos WCF em uma máquina, a memória do contador de desempenho pode ser esgotada. Quando isso acontece, o WCF grava um erro no log de eventos do aplicativo. O conteúdo do erro indica que um contador de desempenho não foi carregado e a entrada contém a exceção "System.InvalidOperationException: a exibição do arquivo de contadores personalizados está sem memória". Se o rastreamento estiver habilitado no nível de erro, essa falha também será rastreada. Se a memória do contador de desempenho estiver esgotada, continuar a executar seus aplicativos WCF com contadores de desempenho habilitados pode resultar em degradação do desempenho. Se você for um administrador da máquina, deverá configurá-la para alocar memória suficiente para suportar o número máximo de contadores de desempenho que podem existir a qualquer momento.

Você pode alterar a quantidade de memória do contador de desempenho para categorias WCF no registro. Para fazer isso, você precisa adicionar um novo valor DWORD nomeado FileMappingSize para os três locais a seguir e defini-lo para o valor desejado em bytes. Reinicie a máquina para que essas alterações entrem em vigor.

  • HKLM\System\CurrentControlSet\Services\ServiceModelEndpoint 4.0.0.0\Performance

  • HKLM\System\CurrentControlSet\Services\ServiceModelOperation 4.0.0.0\Desempenho

  • HKLM\System\CurrentControlSet\Services\ServiceModelService 4.0.0.0\Desempenho

Quando um grande número de objetos (por exemplo, ServiceHost) são descartados, mas aguardam para serem coletados lixo, o PrivateBytes contador de desempenho registrará um número anormalmente alto. Para resolver esse problema, você pode adicionar seus próprios contadores específicos do aplicativo ou usar o performanceCounters atributo para habilitar apenas contadores de nível de serviço.

Tipos de contadores de desempenho

Os contadores de desempenho têm escopo em três níveis diferentes: Serviço, Ponto Final e Operação.

Você pode usar o WMI para recuperar o nome de uma instância do contador de desempenho. Por exemplo,

  • O nome da instância do contador de serviço pode ser obtido por meio da propriedade "CounterInstanceName" da instância do Serviço WMI.

  • O nome da instância do contador de ponto de extremidade pode ser obtido por meio da propriedade "CounterInstanceName" da instância de ponto de extremidade WMI.

  • O nome da instância do contador de operações pode ser obtido por meio do método "GetOperationCounterInstanceName" da instância do WMI Endpoint .

Para obter mais informações sobre WMI, consulte Usando a instrumentação de gerenciamento do Windows para diagnóstico.

Contadores de desempenho de serviço

Os contadores de desempenho do serviço medem o comportamento do serviço como um todo e podem ser usados para diagnosticar o desempenho de todo o serviço. Eles podem ser encontrados sob o objeto de desempenho ao visualizar com o ServiceModelService 4.0.0.0 Monitor de desempenho. As instâncias são nomeadas usando o seguinte padrão:

ServiceName@ServiceBaseAddress

Um contador em um escopo de serviço é agregado do contador em uma coleção de pontos de extremidade.

Os contadores de desempenho para a criação de instâncias de serviço são incrementados quando um novo InstanceContext é criado. Observe que um novo InstanceContext é criado mesmo quando você recebe uma mensagem de não ativação (com um serviço existente) ou quando você se conecta a uma instância de uma sessão, encerra a sessão e se reconecta de outra sessão.

Contadores de desempenho de endpoint

Os contadores de desempenho do endpoint permitem que você examine os dados que refletem como um endpoint está aceitando mensagens. Eles podem ser encontrados sob o objeto de desempenho ao visualizar usando o ServiceModelEndpoint 4.0.0.0 Monitor de Desempenho. As instâncias são nomeadas usando o seguinte padrão:

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

Os dados são semelhantes aos que são coletados para operações individuais, mas são apenas agregados em todo o ponto de extremidade.

Um contador em um escopo de ponto de extremidade é agregado de contadores em uma coleção de operações.

Nota

Se dois pontos de extremidade tiverem nomes e endereços de contrato idênticos, eles serão mapeados para a mesma contrainstância.

Contadores de desempenho de operação

Os contadores de desempenho da operação são encontrados sob o objeto de desempenho ao serem exibidos com o ServiceModelOperation 4.0.0.0 Monitor de Desempenho. Cada operação tem uma instância individual. Ou seja, se um determinado contrato tiver 10 operações, 10 contrainstâncias de operação serão associadas a esse contrato. As instâncias de objeto são nomeadas usando o seguinte padrão:

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

Esse contador permite que você meça como a chamada está sendo usada e como a operação está sendo executada.

Quando os contadores são visíveis em vários escopos, os dados coletados de um escopo mais alto são agregados com dados de escopos mais baixos. Por exemplo, em um ponto de extremidade representa a soma de todas as chamadas de operação dentro do ponto de extremidade, CallsCalls em um serviço representa a soma de todas as chamadas para todos os pontos de extremidade dentro do serviço.

Nota

Se você tiver nomes de operação duplicados em um contrato, obterá apenas uma instância de contador para ambas as operações.

Programando os contadores de desempenho do WCF

Vários arquivos são instalados na pasta de instalação do SDK para que você possa acessar os contadores de desempenho do WCF programaticamente. Esses arquivos estão listados da seguinte maneira:

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

Para obter mais informações sobre como acessar os contadores programaticamente, consulte Performance Counter Programming Architecture.

Consulte também