Contadores de rendimiento de WCF

Windows Communication Foundation (WCF) incluye un gran conjunto de contadores de rendimiento para ayudarle a medir el rendimiento de la aplicación.

Habilitación de contadores de rendimiento

Puede habilitar los contadores de rendimiento para un servicio WCF a través del app.config de configuración del servicio WCF como se muestra a continuación:

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

Puede establecer el atributo performanceCounters para habilitar un tipo específico de contadores de rendimiento. Los valores válidos son

  • All: todos los contadores de categoría (ServiceModelService, ServiceModelEndpoint y ServiceModelOperation) están habilitados.

  • ServiceOnly: solo se habilitan los contadores de categoría ServiceModelService. Este es el valor predeterminado.

  • Off: los contadores de rendimiento ServiceModel* están deshabilitados.

Si desea habilitar los contadores de rendimiento para todas las aplicaciones WCF, puede colocar los valores de configuración en el Machine.config archivo. Consulte la sección Aumento del tamaño de memoria para contadores de rendimiento a continuación para obtener más información sobre cómo configurar suficiente memoria para contadores de rendimiento en el equipo.

Si usa puntos de extensibilidad de WCF como invocadores de operaciones personalizados, también debe emitir sus propios contadores de rendimiento. Esto se debe a que si implementa un punto de extensibilidad, WCF puede que ya no emita los datos del contador de rendimiento estándar en la ruta de acceso predeterminada. Si no implementa la compatibilidad con el contador de rendimiento manual, puede que no vea los datos de contador de rendimiento que espera.

Además, puede habilitar los contadores de rendimiento en el código de la siguiente forma,

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

Visualización de datos de rendimiento

Para ver los datos capturados por los contadores de rendimiento, utilice el monitor de rendimiento (Perfmon.exe) incluido en Windows. Para iniciar esta herramienta, vaya a Inicio y haga clic en Ejecutar y escriba en el cuadro de diálogo.

Nota

Se pueden lanzar instancias del contador de rendimiento antes de que el distribuidor del punto de conexión haya procesado los últimos mensajes. Esto puede dar lugar a que no se capturen los datos de rendimiento de algunos mensajes.

Aumento del tamaño de la memoria para los contadores de rendimiento

WCF usa memoria compartida independiente para sus categorías de contadores de rendimiento.

De forma predeterminada, la memoria compartida independiente se establece en un cuarto del tamaño de la memoria global del contador de rendimiento. La memoria global del contador de rendimiento predeterminada es 524.288 bytes. Por lo tanto, las tres categorías de contadores de rendimiento de WCF tienen un tamaño predeterminado de aproximadamente 128 KB cada una. En función de las características en tiempo de ejecución de las aplicaciones WCF en un equipo, se puede agotar la memoria del contador de rendimiento. Cuando esto sucede, WCF escribe un error en el registro de eventos de la aplicación. El contenido del error indica que no se cargó un contador de rendimiento y la entrada contiene la excepción "System.InvalidOperationException: la vista de archivo de contadores personalizados está fuera de memoria". Si el seguimiento está habilitado en el nivel de error, también se hace un seguimiento de este error. Si se agota la memoria del contador de rendimiento, la continuación de la ejecución de las aplicaciones WCF con contadores de rendimiento habilitados podría provocar una degradación del rendimiento. Si es administrador de la máquina, configúrela y asigne memoria suficiente para admitir el número máximo de contadores de rendimiento que puedan existir en cualquier momento.

Puede cambiar la cantidad de memoria del contador de rendimiento para las categorías de WCF en el Registro. Para cambiarla, es necesario agregar un nuevo valor DWORD, denominado FileMappingSize, a las tres ubicaciones siguientes y establecerlo en el valor en bytes deseado. Reinicie su equipo para que estos cambios se hagan efectivos.

  • 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

Cuando se elimina un número importante de objetos (por ejemplo, ServiceHost) pero se espera recopilar los elementos no usados, el contador de rendimiento PrivateBytes registra un número excepcionalmente alto. Para solucionar este problema, puede agregar sus propios contadores específicos de la aplicación, o utilizar el atributo performanceCounters para habilitar solo los contadores del nivel de servicio.

Tipos de contadores de rendimiento

Los contadores de rendimiento abarcan tres niveles diferentes: servicio, punto de conexión y operación.

Puede utilizar WMI para recuperar el nombre de una instancia del contador de rendimiento. Por ejemplo,

  • El nombre de instancia del contador de servicio se puede obtener a través de la propiedad "CounterInstanceName" de la instancia del servicio WMI.

  • El nombre de la instancia del contador de extremo se puede obtener a través de la propiedad "CounterInstanceName" de la instancia del punto de conexión WMI.

  • El nombre de la instancia del contador de operación se puede obtener a través del método "GetOperationCounterInstanceName" de la instancia del punto de conexión WMI.

Para obtener más información sobre WMI, vea Using Windows Management Instrumentation for Diagnostics.

Contadores de rendimiento del servicio

Los contadores de rendimiento del servicio miden el conjunto del comportamiento del servicio y se utilizan para diagnosticar el rendimiento de todo el servicio. Pueden encontrarse en el objeto de rendimiento ServiceModelService 4.0.0.0 al visualizarlo con el monitor de rendimiento. Los nombres de las instancias se establecen utilizando el siguiente patrón:

ServiceName@ServiceBaseAddress

Se agrega un contador a un ámbito del servicio desde el contador de una colección de extremos.

Los contadores de rendimiento de la creación de una instancia de servicio aumentan cuando se crea un nuevo InstanceContext. Tenga en cuenta que también se crea un nuevo InstanceContext cuando recibe un mensaje de no activación (con un servicio existente), o cuando se conecta a la instancia de una sesión, finaliza la sesión y, a continuación, se vuelve a conectar desde otra sesión.

Contadores de rendimiento del punto de conexión

Los contadores de rendimiento del punto de conexión permiten examinar datos que reflejan la aceptación de los mensajes por un punto de conexión. Pueden encontrarse en el objeto de rendimiento ServiceModelEndpoint 4.0.0.0 al visualizarlo mediante el monitor de rendimiento. Los nombres de las instancias se establecen utilizando el siguiente patrón:

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

Los datos son similares a los recopilados para las operaciones individuales, pero solo se agregan a lo largo del punto de conexión.

Un contador en un ámbito de extremo se agrega desde los contadores de una colección de operaciones.

Nota

Si dos puntos de conexión poseen nombres y direcciones de contrato idénticos, se asignan a la misma instancia del contador.

Contadores de rendimiento de la operación

Los contadores de rendimiento de la operación se encuentran en el objeto de rendimiento ServiceModelOperation 4.0.0.0 al visualizarlo con el monitor de rendimiento. Cada operación posee una instancia individual. Es decir, si un contrato determinado posee 10 operaciones, se asociarán 10 instancias de contador de operación a ese contrato. Los nombres de las instancias de objeto se establecen utilizando el siguiente patrón:

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

Este contador permite medir la utilización de la llamada y el buen rendimiento de la operación.

Cuando los contadores son visibles en varios ámbitos, los datos recopilados de un ámbito superior se agregan a los datos de los ámbitos inferiores. Por ejemplo, Calls a un punto de conexión representa la suma de todas las llamadas de la operación en el punto de conexión; Calls a un servicio representa la suma de todas las llamadas a todos los puntos de conexión del servicio.

Nota

Si existen nombres de la operación duplicados en un contrato, solo se obtiene una instancia de contador para ambas operaciones.

Programación de los contadores de rendimiento de WCF

Hay varios archivos instalados en la carpeta de instalación del SDK para que pueda acceder a los contadores de rendimiento de WCF mediante programación. Estos archivos se enumeran de la siguiente manera:

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

Para obtener más información sobre cómo acceder a los contadores mediante programación, vea Arquitectura de programación de contadores de rendimiento.

Consulta también