Los contadores de rendimiento nos permiten diagnosticar y monitorizar en producción el comportamiento de nuestra aplicación/servicio y saber su consumo a nivel de CPU, memoria, red, I/O y otras métricas que nos pueden servir para determinar si todo esta funcionando correctamente o tenemos algún problema.
Problemas de rendimiento
En el caso de servicios WCF, si tenemos problemas de rendimiento, una forma rápida de investigar es activar los contadores en nuestro «.config», para empezar a tener métricas de uso, como referencia, un servicio WCF debe aceptar entre 200-500 pet/segundo en un entorno normal, también afecta al rendimiento la configuracion de hardware y software en producción sobretodo si el servidor esta «virtualizado» con recursos compartidos o tenemos un servicio WCF único muy grande o separados en varios independientes.
Importante, una vez realizado el diagnóstico y monitorización recordar que siempre debemos desactivarlos para no afectar al sistema en producción.
Activar Contadores WCF
<configuration>
<system.serviceModel>
<diagnostics performanceCounters=”All” />
</system.serviceModel>
</configuration>
Desactivar Contadores WCF
<configuration>
<system.serviceModel>
<diagnostics performanceCounters=”Off” />
</system.serviceModel>
</configuration>
Lista de Contadores WCF
Disponemos de 3 grandes bloques de contadores de rendimiento WCF que podemos consultar para tener información de primera mano de como esta trabajando nuestro servicio WCF, la lista completa de información seleccionable incluye calls, failed, faulted, duration, instances, etc:
Consultar Contadores WCF
Seguidamente, para consultar los contadores, usaremos la herramienta de Windows, Performance monitor (perfmon.exe) que viene instalada en todas las versiones de Windows y añadiremos los contadores que nos interesa al gráfico para verlos en tiempo real.
Abrir perfmon.exe y situarnos en la opción «monitor de rendimiento» para ver la gráfica general del estado de CPU.
Después, pulsar el botón [+] para añadir los contadores WCF de la lista que nos interese monitorizar (aquí veremos los 3 grupos comentados anteriormente) seleccionamos lo deseado y pulsar botón OK.
Throttling WCF
Como sabemos, esto no es una ciencia exacta, hay que analizar cada escenario en producción para aplicar la configuración más óptima, para ello, podemos cambiar la configuración de WCF, teniendo en cuenta que siempre debemos medir de nuevo una vez realizados los cambios para saber si hemos obtenido una mejora de rendimiento.
Recordar que los servicios WCF tienen esta configuración por defecto:
Property |
.NET 4.0 Default |
.NET 3.5 Prev
|
MaxConcurrentCalls |
16 * Processor |
16 |
MaxConcurrentInstances |
116 * Processor |
26 |
MaxConcurrentSessions |
100 * Processor |
10 |
Importante |
- MaxConcurrentCalls: How many number of request can be accepted by a service (Should be set to less than the SQL connection pool size).
- MaxConcurrentInstances: How many number of instances of service can be created by a service (Keep in mind the relationship between the MaxConcurrentInstances property and the InstanceContextMode property).
- MaxConcurrentSessions: How many number of request can be processed by a service (When this property is set to a value less than the number of client threads, the requests from multiple clients may get queued in the same socket connection).
|
Cambiando Throttling WCF
Podemos usar los <behaviors> en nuestro archivo app.config ó web.config para definir los parametros que adopte nuestro servicio WCF, recordando lo anteriormente comentado, volver a medir para ver si ganamos o perdemos rendimiento.
<behaviors>
<serviceBehaviors>
<behavior name="throttlingBehavior">
<serviceThrottling maxConcurrentCalls="16"
maxConcurrentInstances="2147483647"
maxConcurrentSessions="10" />
</behavior>
</serviceBehaviors>
</behaviors>
Conclusión
Como veis, no es muy complicado, en Youtube existen muchos videos más detallados de como interpretar toda esta información.
Nos leemos!!