Pregunta CPU alta intermitente (100%) en el servidor web de producción


X-Post desde StackOverflow:

https://stackoverflow.com/questions/9465123/intermittent-high-cpu-100-on-production-webserver

Tenemos un clúster web con 3 servidores web, cada uno con 24 núcleos y 24 GB de memoria.

Nuestra aplicación es la última versión de ASP.NET 4.0 parcheada, con MVC3, en IIS 7.5 - En su propio grupo de aplicaciones.

Muy intermitentemente, (tal vez una vez cada 2/3 días) uno de los servidores web dejará de atender las solicitudes, y los 24 núcleos mostrarán el 100% de la CPU (la memoria y el disco parecen normales).

Las pocas veces que el administrador de IIS no está completamente congelado, las solicitudes activas en ejecución no parecen ofrecer ninguna información útil, con una distribución bastante aleatoria en una gran cantidad de áreas / solicitudes de sitios.

Una vez que un servidor ha muerto, podemos sacarlo de la carga, y después de unos 5 minutos de solicitudes sin servicio, la actividad de la CPU se reducirá a lo normal, lo que nos hace pensar que no es un bucle infinito.

Un volcado de memoria del proceso de trabajo (¡alrededor de 4 GB es el tamaño!) No parece mostrar ninguno de nuestros códigos / espacios de nombres en ninguna parte de los rastros de pila administrados, sino simplemente .Net comenzar a solicitar cosas (es posible que esté usando WinDbg mal, y no cargar nuestros símbolos correctamente, pero las huellas de la pila no muestran ninguna llamada de método faltante / sin nombre, por lo que estoy bastante confundido)

Nuestros servidores normalmente procesan 1000 req / s bastante felices, por lo que todo esto es muy extraño.

Una cosa extraña que notamos en Perfmon fue que la tasa de contención / seg se eleva a 800. No tenemos ningún código multihilo elegante en nuestra aplicación, y los únicos bloqueos que tenemos están en nuestro código de almacenamiento en caché (que no tiene cambiado en edades).

Cualquier consejo / consejo sobre cómo diagnosticar más este problema sería lo más apreciado.

Aclamaciones.


5
2018-02-27 13:00


origen


Un posible motivo: ASP.NET recicla los grupos de aplicaciones periódicamente. Cuando hay muchas solicitudes, durante este reciclaje, IIS puede comenzar a ponerlas en cola. Cuando el grupo de aplicaciones vuelve, hay muchas solicitudes en espera + nuevas, por lo que IIS comienza a procesar muchas de ellas => comen CPU / memoria / lo que sea que necesite. No hay suficientes recursos => lento => más solicitudes en cola => más a menudo grupos de aplicaciones de reciclaje IIS => bola de nieve.
tal vez alguna StackOverflowException, un bucle infinito, recursión
Vamos chicos, no publiquen DOS VECES. - TomTom
Sí, nos preocupa que sea una especie de rareza O (n ^ n) o algún otro algoritmo de mierda que de alguna manera se haya convertido en producción. Sin embargo, como dije, en nuestros volcados de memoria, esperarías ver nuestro código / espacios de nombres, por lo que podríamos averiguar cuál puede ser el método ofensivo. Pero solo hay llamadas de vainilla .Net - nada propietario. Extraño. - Dave


Respuestas:


Dave, Unos pocos pensamientos para empezar:

Estoy asumiendo que es el w3wp.exe que está comiendo tus recursos. Si no es así, podría valer la pena ejecutar algunos informes PAL para obtener una mejor comprensión de la salud general del servidor: http://pal.codeplex.com/  A veces incluso ejecuto PAL incluso si es un problema de IIS ... PAL puede detectar todo tipo de problemas en los que nunca pensarías.

Verifique el Monitor de rendimiento (antes y durante su aumento) ... trate de averiguar si su Solicitud / Seg de aplicaciones de ASP.Net es mayor durante los períodos de "respuesta lenta" ... Creo que esa es la forma más rápida de informarle Si está manejando más solicitudes de lo normal.

Intente averiguar si hay una (o unas pocas) páginas que tardan más en cargarse. Asegúrese de que las estadísticas de IIS se están registrando y luego busque un aumento en el tiempo necesario. Analizador de registro de pagohttp://www.iis.net/community/default.aspx?tabid=34&g=6&i=1864).

Ah, y no olvides el mini perfilador StackExchange. http://code.google.com/p/mvc-mini-profiler/ Una vez que descubras qué URL está causando el problema.

Además, no pase por alto ningún error de .NET que haya detectado :-)

Háganos saber lo que ve. -Chris


6
2018-02-27 19:29



Hola Chris - gracias por tu ayuda. De manera molesta, no generamos archivos de registro, ya que, literalmente, no tenemos espacio en el disco para almacenarlos (50Gig + / d) Las solicitudes por segundo son bastante estándar, con respecto a los otros servidores. Además, en realidad usamos mini-profiler, y no tenemos problemas para mostrar, hasta ahora. Lo extraño de este problema es su naturaleza intermitente :( - Dave
Dave, ¿puedes confirmar que w3wp.exe consume el procesador? Tal vez podría habilitar el registro de IIS durante el pico? La otra opción es configurar el seguimiento de solicitudes fallidas para solicitudes que demoren más que x. Eso mostraría cualquier problema a nivel de IIS. Sin embargo, como sospecha, el problema probablemente se encuentre en el nivel .net. - Chris Anton
Sí, es w3wp.exe, gracias de nuevo por cualquier ayuda. - Dave


Utilice DebugDiag 1.2 para realizar el análisis del volcado:

https://www.microsoft.com/download/en/details.aspx?id=26798 

Es útil tener en cuenta que cualquier proceso que sea capaz de usar más de un subproceso puede impulsar la utilización al 100% en todos los procesadores de un servidor. Esto incluye código nativo e incluso componentes del sistema operativo principal.

Cuando dices "el último parche", para mí eso significa que con Windows Update, que no recibe muchas de las correcciones de errores más graves para Windows 2008 R2.

En particular, si la aplicación está accediendo a cualquier archivo en recursos compartidos remotos, sería una buena idea tener aplicadas las revisiones del sistema de archivos:

Lista de revisiones actualmente disponibles para las tecnologías de servicios de archivos en Windows Server 2008 y en Windows Server 2008 R2
http://support.microsoft.com/kb/2473205 


3
2018-02-27 19:49





Compruebe si está siendo atacado por un ataque HashDos y configure los límites de solicitud.


1
2018-02-27 13:03



De hecho, investigamos eso, y aplicamos el parche reciente de MS, que supuestamente mitiga este problema. En realidad, lo revisamos a través de un sitio web que supuestamente intenta atacar su sitio, y "pasamos" (no puedo recordar el sitio, aunque) - Dave
Podrías probar con github.com/FireFart/HashCollision-DOS-POC - jamespo