2010-01-12 28 views
50

Una aplicación web ASP.NET que se ejecuta en IIS6 dispara periódicamente a la CPU hasta el 100%. Es el W3WP el responsable de casi todo el uso de la CPU durante estos episodios. La CPU permanece fija al 100% en cualquier momento, desde unos pocos minutos hasta más de una hora.W3WP.EXE usando CPU 100% - ¿por dónde empezar?

Esto se encuentra en un servidor de transición y el sitio solo recibe tráfico muy ligero de los evaluadores en este momento.

Hemos ejecutado ANTS Profiler en el servidor, pero no ha sido esclarecedor.

¿Dónde podemos comenzar a descubrir qué está causando estos episodios y qué código mantiene ocupada a la CPU durante todo ese tiempo?

+0

¿Está de alguna manera registrando excepciones dentro de su ¿código? Llamando algo así como "Logger.Log (Exception)"? – wtaniguchi

Respuesta

34
  1. Contadores de rendimiento de Windows estándar (busque otras actividades correlacionadas, como muchas solicitudes GET, exceso de E/S de red o disco, etc.); puede leerlos desde el código así como desde perfmon (para desencadenar la recopilación de datos si el uso de la CPU excede un umbral, por ejemplo)
  2. Contadores de rendimiento personalizados (especialmente tiempo para solicitudes no incluidas y otras llamadas donde el tiempo de ejecución es incierto)
  3. Las pruebas de carga, utilizando herramientas como Visual Studio Team Test o WCAT
  4. Si se puede probar o actualizar a IIS 7, puede configurar de solicitudes con error rastreo para generar una huella si las solicitudes toman más de una cierta cantidad de tiempo
  5. Use logparser para ver qué solicitudes llegaron en el momento del pico de la CPU
  6. Revisiones de código/recorridos (en particular, l Ook for bucles que pueden no terminar adecuadamente, como si ocurre un error, así como bloqueos y posibles problemas de enhebrado, como el uso de estática)
  7. Perfilado de CPU y memoria (puede ser difícil en un sistema de producción)
  8. Process Explorer
  9. de recursos de Windows monitor de
  10. registro de errores detallada
  11. el registro de seguimiento personalizado, incluyendo detalles de tiempo de ejecución (tal vez condicional, en base a la CPU de usar Potencia del contador)
  12. son los errores que ocurren cuando el AppPool recicla ? Si es así, podría ser una pista.
+6

Voy a agregar para el registro lo que terminó llevándonos al origen del problema: ** SQL Profiler **. Tuvimos una consulta LINQ to SQL compleja que incluía una referencia a un objeto en memoria, por lo que no fue posible traducir toda la consulta a la memoria y en su lugar se activaron literalmente miles de pequeñas consultas SQL para realizar una unión. –

0

Teníamos esto en una consulta recursiva que arrojaba toneladas de datos a la salida. ¿Ha comprobado si todo sale y no existen bucles infinitos?

Podría tratar de reducirlo con una sola página - encontramos que las HORMIGAS tampoco son de mucha ayuda en ese mismo caso - lo que terminamos haciendo fue ejecutar el sitio golpear una página mirar la CPU - pulsar la siguiente página mirar CPU - muy metódico y consume mucho tiempo, pero si no puede encontrarlo con algo de código de depuración que puede estar fuera de suerte -

Hemos sido capaces de utilizar IIS archivos de registro para realizar un seguimiento a un conjunto de páginas que eran sospechosos -

Espero que ayude!

4

Si su CPU está aumentando al 100% y permanece allí, es bastante probable que tenga un escenario de punto muerto o un bucle infinito. Un perfilador parece una buena opción para encontrar un ciclo infinito. Los callejones sin salida son mucho más difíciles de rastrear, sin embargo.

+1

Utilice el generador de perfiles dotTrace y elija "Árbol de llamadas" por "Todos los hilos" que debería mostrar que los métodos con los que más CPU se gastaron se agruparon en 1 pila de llamadas.Seguir hacia abajo para ver exactamente dónde. –

11

No es una gran respuesta, pero es posible que deba ir a la vieja escuela y capturar una imagen instantánea del proceso de IIS y depurarlo. También puede consultar el blog de Tess Ferrandez: es una ingeniera de escalamiento ** de microsoft y su blog se centra en depurar ventanas ASP.NET, pero el blog es relevante para la depuración de ventanas en general. Si selecciona la etiqueta ASP.NET (que es a lo que me he vinculado), verá varios elementos que son similares.

4

Process Explorer es una excelente herramienta para la resolución de problemas. Puede intentarlo para encontrar el problema del alto uso de CPU. Le da una idea de cómo funciona su aplicación.

También puede probar Procdump para volcar el proceso y analizar lo que realmente sucedió en la CPU.

-2

Si identifica una página que tarda en cargarse, use SharePoint Developer Dashboard para ver qué componente lleva tiempo.

+4

No creo que haya visto a Sharepoint mencionado aquí. –

0

Esto es una suposición en el mejor de los casos, pero tal vez su equipo de desarrollo está creando y desplegando la aplicación en modo de depuración, en lugar del modo de lanzamiento. Esto causará la aparición de archivos .pdb. La consecuencia de esto es que su aplicación tomará recursos adicionales para recopilar información de depuración y estado del sistema durante la ejecución de su sistema, lo que causará una mayor utilización del procesador.

Por lo tanto, sería lo suficientemente simple como para asegurarse de que están compilando y desplegando en modo de lanzamiento.

0

Esta es una publicación muy antigua, lo sé, pero este también es un problema común. Todos los métodos sugeridos son muy buenos, pero siempre apuntan a un proceso, y existen muchas posibilidades de que ya sepamos que nuestro sitio está creando problemas, pero solo queremos saber qué página específica está invirtiendo demasiado tiempo en el procesamiento. La herramienta más precisa y simple en mi opinión es IIS.

  1. Simplemente haga clic en su servidor en el panel izquierdo de IIS.
  2. Haga clic en 'Procesos del trabajador' en el panel principal. ya ves qué grupo de aplicaciones está tomando demasiada CPU.
  3. doble clic en esta línea (con el tiempo de actualización haciendo clic en 'Mostrar todos') para ver qué páginas consumen demasiado tiempo de CPU ('Tiempo transcurrido' columna) en esta piscina
Cuestiones relacionadas