Pregunta

Una aplicación web ASP.NET que se ejecuta en IIS6 dispara periódicamente la CPU hasta el 100%. Es el W3WP el responsable de casi todo el uso de la CPU durante estos episodios. La CPU permanece fijada al 100% en cualquier lugar de unos minutos a más de una hora.

Esto está en un servidor de puesta en escena y el sitio solo recibe un tráfico muy ligero de los probadores en este momento.

Hemos ejecutando Ants Profiler en el servidor, pero no ha sido iluminador.

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

¿Fue útil?

Solución

  1. Contadores de rendimiento de Windows estándar (busque otra actividad correlacionada, como muchas solicitudes GET, red o disco excesivo de E/S, etc.); Puede leerlos desde el código y de perfmon (para activar la recopilación de datos si el uso de la CPU excede un umbral, por ejemplo)
  2. Contadores de rendimiento personalizados (particularmente en tiempo para solicitudes fuera de caja y otras llamadas donde el tiempo de ejecución es incierto)
  3. Prueba de carga, utilizando herramientas como Visual Studio Team Test o WCAT
  4. Si puede probar o actualizar a IIS 7, puede configurar el rastreo de solicitudes fallidas para generar un rastro si las solicitudes toman más una cierta cantidad de tiempo
  5. Use logParser para ver qué solicitudes llegaron al momento de la espiga de la CPU
  6. Revisiones / recorridos de código (en particular, busque bucles que puedan no terminar correctamente, como si ocurra un error, así como bloqueos y posibles problemas de roscado, como el uso de las estadísticas)
  7. CPU y perfiles de memoria (puede ser difícil en un sistema de producción)
  8. Explorador de procesos
  9. Monitor de recursos de Windows
  10. Registro de errores detallados
  11. Registro de rastreo personalizado, incluidos los detalles de tiempo de ejecución (quizás condicional, basado en el contador de PERF de uso de la CPU)
  12. ¿Están ocurriendo los errores cuando el Apppool recicla? Si es así, podría ser una pista.

Otros consejos

No es una gran respuesta, pero es posible que deba ir de la vieja escuela y capturar una instantánea de imagen del proceso IIS y depurarla. Es posible que también quieras ver Tess FerrándezBlog: es una ingeniera de escalada de Microsoft de Kick A ** y su blog se centra en la depuración de Windows ASP.NET, pero el blog es relevante para la depuración de Windows en general. Si selecciona la etiqueta ASP.NET (que es a lo que he vinculado), verá varios elementos que son similares.

Si su CPU aumenta al 100% y se queda allí, es muy probable que tenga un escenario de punto muerto o un bucle infinito. Un perfilador parece una buena opción para encontrar un bucle infinito. Sin embargo, los puntos muertos son mucho más difíciles de rastrear.

Explorador de procesos es una excelente herramienta para la resolución de problemas. Puedes probarlo para encontrar el problema de alto UPC uso. Le da una idea de la forma en que funciona su aplicación.

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

Además, mira tus contadores de perfmon. Pueden decirle dónde se está gastando mucho de ese tiempo de CPU. Aquí hay un enlace a los contadores más comunes para usar:

Tuvimos esto en una consulta recursiva que estaba arrojando toneladas de datos a la salida: ¿ha marcado dos veces que 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, presione una página. Y consume mucho tiempo, pero si no puede encontrarlo con algún rastreo de código, podría no tener suerte -

Pudimos usar archivos de registro IIS para rastrearlo en un conjunto de páginas que eran sospechosas,

Espero que ayude !

Esto es una suposición en el mejor de los casos, pero quizás su equipo de desarrollo está construyendo e implementando la aplicación en modo de depuración, en lugar de modo de lanzamiento. Esto causará la aparición de archivos .pdb. La implicación de esto es que su aplicación tomará recursos adicionales para recopilar información del estado del sistema y depurar durante la ejecución de su sistema, causando más utilización del procesador.

Por lo tanto, sería lo suficientemente simple como para asegurarse de que estén construyendo e implementando en modo de lanzamiento.

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

  1. Simplemente haga clic en su servidor en el panel izquierdo de IIS.
  2. Haga clic en 'Procesos de trabajadores' en el panel principal. Ya ves qué grupo de aplicaciones está tomando demasiada CPU.
  3. Haga doble clic en esta línea (eventualmente actualice haciendo clic en 'Show All') para ver qué páginas consumen demasiado tiempo de CPU (columna 'El tiempo transcurrido') en este grupo

Si identifica una página que toma tiempo para cargarse, use SharePoint's Tablero de desarrolladores para ver qué componente lleva tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top