12

Estoy tratando de encontrar la forma de crear un perfil de un servicio WCF para poder identificar los cuellos de botella.
He encontrado un poco de información en línea, pero nada que asuma sin conocimiento previo que es donde estoy.Cómo comenzar a utilizar el perfil de rendimiento WCF

¿Qué son herramientas GRATUITAS recomendadas?

- visual studio tools 
- clrprofiler 

Here es información que encontré usando vsperfcmd.exe al perfil WCF servicio y de acuerdo a esto, es muy simple, pero es necesario que rellene los huecos de por dónde empezar. Mis suposiciones son copiar VsPerfCLREnv y VsPerfCmd en el servidor que aloja mi servicio wcf y realizar algunos pasos de configuración en los que no estoy seguro. Tampoco estoy muy seguro de cómo podría ver la pila de llamadas para evaluar el rendimiento de cada llamada.

clrprofiler parece un poco más simple. Supongo que copiaría clrprofiler.exe en el servidor, File->Profile Service y agregaría el nombre y los comandos de inicio/detención. (¿Es este un nombre o nombre de archivo amistoso o el nombre para mostrar del servicio?) Asumo que luego ejecutaría mis pruebas contra el servicio y podría ver la pila de llamadas en clrprofiler. ¿Eso suena correcto?

[editar]
no estoy tan interesado en probar la red ya que se trata de un servidor de prueba, y este es un proyecto WCF grande con múltiples desarrolladores en ella y soy incapaz de realizar cambios en el proyecto de el único propósito de controlar el rendimiento. Quiero centrarme en el rendimiento de los métodos reales dentro de él.

Cualquier ayuda sobre cómo empezar es muy apreciada.

+0

También puede utilizar "Perfmon" - www.codeproject.com/Articles/431917/WCF-Service-Performance-Monitoring-using-Perfmon –

Respuesta

5

algunas cosas que he aprendido que el usuario puede útiles:

no se puede perfil remoto un servicio, incluso a través de su red local. El generador de perfiles debe ejecutarse en la misma máquina que el servicio. (Esto en realidad me tomó bastante tiempo descifrar. Quizás sea obvio para ti, pero nunca fue explicado, así que seguí tratando de hacerlo)

Visual Studio no funcionó para que yo perfilara mi servicio WCF. Pude obtener un poco de ayuda del equipo de perfil de VS, pero nunca salió con una solución funcional.

VS fue lento para conectar y desconectar el generador de perfiles y, a menudo instrumentado mis binarios y los dejó en un estado dañado.

.net no es necesario instrumentar los binarios ya que contienen los metadatos de los métodos, lo cual es extraño que el estudio visual mantuviera manguera de mis binarios tratando de instrumentarlos.

También probé el perfilador autónomo VS pero es muy complejo de usar y requiere reiniciar mi servidor.

Terminé obteniendo un generador de perfiles interno para trabajar (después de obtener una compilación privada del equipo) así que no estoy seguro de cuántos perfiladores están diseñados para trabajar con un servicio WCF.

De hecho configuré el generador de perfiles para ver el servicio WAS y luego agregué mis binarios adicionales al generador de perfiles.

El explorador de procesos es útil para solucionar problemas si el generador de perfiles está conectado o no. Úselo para ver el entorno inetinfo.exe

1

¿Puede ejecutarlo con un depurador?

¿Puedes soportar un método simple y pasado de moda que solo funciona? Here's one.

1

Además de los comentarios de Mike, puede usar los contadores de rendimiento incorporados de WCF para ver una cantidad de métricas relacionadas con el rendimiento y también puede ver los tiempos de llamada en un trazo de WCF. Una vez que sepa qué operaciones son 'lentas', generalmente es más fácil agregar algún código de temporización/registro personalizado a esas operaciones que usar un generador de perfiles de propósito general para algo como esto. Esto proviene de alguien que solía trabajar en perfiles comerciales.

6

Para WCF no es suficiente con el perfil de su código solo cuando suceden muchas cosas en la pila de canales (seguridad, deserialización, formateo, etc.). Una buena forma de visualizar esto es mediante el uso de Seguimiento de WCF en un nivel detallado y luego usando el service trace viewer para ver cuánto tarda en cada paso del procesamiento de mensajes. Lea aquí sobre cómo configure and use WCF tracing. Esta es la única cosa que me ha impresionado al diagnosticar los problemas de WCF.

Por supuesto, todos los demás perfiles de código, perfiles de DB, etc. son un enfoque válido también. Incluso puede usar una herramienta como SoapUI para probar la comunicación de red y la sobrecarga de rendimiento del lado del cliente para un punto de referencia más integral.

+0

Sí. La forma en que manejo las situaciones asincrónicas es 1) usar la pausa aleatoria en los hilos para asegurarme de que sean lo más eficientes posible, y luego 2) realizar un registro detallado de los mensajes, fusionado a través de los procesos. No diré que estudiar los rastros de mensajes es fácil, pero es efectivo. Para mí, fue sorprendente la rapidez con la que se podría ejecutar un protocolo de paso de mensajes asíncrono. –

+0

gracias, estoy buscando en el rastreo wcf, pero no estoy seguro de qué buscar en la salida. Estoy interesado principalmente en los cuellos de botella de rendimiento del servidor vs comunicación de red y cliente. Tengo algunos métodos objetivo que quiero analizar y veo dónde se pueden hacer mejoras. – earthling

+1

Si abre el seguimiento en el visor de seguimiento de servicio, verá todas las actividades en un proceso de mensaje de error. Uno de ellos es la actividad Ejecutar código de usuario y ver cuánto tiempo se gasta. Esto le dará una idea de cuánto tiempo tarda su código en ejecutarse. Pero, de hecho, si necesita profundizar en el cuello de botella de rendimiento en su código, debe usar un generador de perfiles como el analizador de Visual Studio incorporado o el excelente perfil de rendimiento de nants de RedGate. – softveda

1

Herramientas que debe considerar: svctracelogviewer (y activar el rastreo tanto en su servicio como en sus clientes). SoapUI para simular carga (y hacer análisis) y Fiddler, una excelente herramienta de diagnóstico/sniffer HTTP.

+0

¿sabes cómo usar el violinista para controlar el tráfico de wcf? Estoy usando el cliente de prueba wcf y no obtengo ninguna información en el violín. – earthling

+0

¿Estás intentando usar Fiddler contra un servicio que se ejecuta en localhost? Si es así, busque en la documentación lo que necesita hacer para que funcione. – larsw

+0

El servicio está alojado en un servidor de prueba. Ahora que lo pienso, no estoy seguro si esto es posible con el violín ya que el servicio está usando el enlace tcp. Tal vez esta es una pregunta mejor para un nuevo hilo. – earthling

Cuestiones relacionadas