Tengo cinco aplicaciones en un plan de servicio de aplicaciones de Azure, todas diferentes copias de la misma aplicación para diferentes clientes. Es una aplicación ASP.NET MVC con una base de datos SQL.
Esta mañana me desperté con sitios lentos y que no responden, lo que a veces resulta en un error 503. Al verificar las métricas de CPU / Memoria para el Plan de Servicio de la Aplicación descubrí que la CPU estaba vinculada al 100%:
Y el gráfico del tiempo de CPU de los sitios individuales muestra que todos se disparan al mismo tiempo, aunque algunos peor que otros:
Traté de resolver el problema haciendo un reinicio avanzado de la aplicación, pero el blade no se cargaba, supongo que estaba tratando de obtener información del servidor que no podía responder.
Al final, intenté detener cada uno de los sitios uno por uno, lo que devolvió la CPU a cero, luego los volví a encender, lo que parecía haber resuelto el problema, pero ahora algunos de ellos están comenzando a subir de nuevo.
Experimenté un problema similar hace un par de semanas y asumí que estaba creciendo demasiado para mi Plan de aplicaciones, así que actualicé de S1 a S2 y había estado bien hasta hoy.
Estoy totalmente perdido en cuanto a cómo averiguar cuál es la causa de este comportamiento hambriento de CPU. ¿Alguien puede señalarme en la dirección correcta de cómo puedo comenzar a diagnosticar esto?
fuente
Respuestas:
Hemos tenido este problema varias veces y cada vez se ha ejecutado GC (recolección de basura). Es difícil de probar y diagnosticar, pero lo que termino haciendo es usar el sitio kudo (scm), hacer clic en herramientas => soporte (que lo lleva al sitio de soporte para aplicaciones.
Desde aquí, elija su directorio (en caso de que tenga varios) y sitio, haga clic en Analizar => Métricas y luego en el botón Diagnosticar ( NOTA: esto ya ha cambiado para que estos pasos puedan cambiar en cualquier momento), luego vuelva a Analizar => Dianotics, usted Eventualmente obtendré un informe de volcado de memoria => "estado de análisis". Este debe ser un archivo mht (que puede abrir en el navegador odioso IE o Edge), luego busque la clave "gc".
encontrará algunos marcos de pila de llamadas interesantes con referencias a cosas como "GCFrame" o llamadas más interesantes a "System.Threading.WaitHandle.WaitMultiple" si obtiene demasiados de estos, es posible que su sistema tenga problemas con la recolección de basura .
Cómo resolver eso ... ese es un tema cubierto en muchos otros hilos porque es como preguntar "¿cómo vivo en un mundo con IE 6 todavía en uso?" ...
fuente
Su mejor opción sería instalar New Relic o Application Insights para esta aplicación en particular. Se puede instalar fácilmente a través del Servicio de aplicaciones -> Herramientas -> Supervisión del rendimiento. Esto le dará una visión detallada de lo que está sucediendo tanto en el lado del servidor como en el del cliente.
Artículo: Supervisar el rendimiento de la aplicación web de Azure
fuente