Ok, nuestra nueva compilación tiene picos de CPU del 100% en cada servidor a intervalos aleatorios. Durante largos períodos, hace que el sitio no responda totalmente; esto será en las horas punta cuando personas de diferentes países inicien sesión en el sitio, etc.
Hemos analizado perfmom, perfiladores de memoria, CLR profiler, sql profilers, Red gate ants profiler, probamos pruebas de carga en UAT, pero ni siquiera podemos reproducir el problema. Esto podría significar que solo miles de usuarios que acceden al sitio en vivo hacen que suceda.
Un patrón que notamos fue que el nuevo código, la construcción rota, en realidad usa notablemente menos hilos.
También estamos usando Spring para COI. ¿Tiene esto una reputación de cama?
Para empeorar las cosas, no podemos implementar para vivir debido al impacto comercial, por lo que no podemos reducir el problema al subconjunto de las nuevas funciones que hemos agregado.
Realmente estamos destruidos. ¿Alguien tiene alguna cicatriz de batalla que pueda salvarnos algunas vidas?
Respuestas:
Sugiero hacer volcados de memoria y analizarlos en WinDdg con Sos. Solucioné algunos problemas en nuestra producción que probablemente no podría diagnosticar sin WinDbg.
Tess Fernández tiene un excelente blog donde puedes aprender a analizar volcados de memoria.
fuente
Esto generalmente es causado por la limpieza de objetos grandes y de larga duración en el GC ( stackoverflow tuvo este problema, vea el enlace ). ¿Estás almacenando muchas colecciones de objetos en caché o sesión?
Asalto por GC
También le recomiendo que cree y configure un nuevo servidor en producción para probar. Si tiene una locura aleatoria y no sabe por qué y no puede reproducirlo, señalaría con el dedo el hardware o la configuración, no el código.
fuente
¿Es este un servidor virtual con recursos compartidos o un servidor físico? Si es el primero, quizás podría considerar dedicar recursos a este servidor. Buena suerte...
fuente
Intente usar a
cache server
como interfaz de usuarioApache Traffic Server (ATS)
.Si bien esto no resolverá el problema, puede ser útil identificarlo porque al mismo tiempo moverá la carga potencialmente dañina del backend (ver si el frontend también tiene problemas) y hará que las cosas estén menos calientes en el backend, por lo que será Es más fácil ver lo que está mal.
fuente
Intentar adivinar la falla sin los datos no tiene sentido. Sí, alguien en stackoverflow o en su equipo de ingeniería podría tener suerte, pero eso es solo una mala ingeniería, y no puede hacer un plan sobre cuánto tiempo le llevará probar cada suposición, y si incluso encontraría el problema.
El 100% de la CPU es un poco sospechoso en el sentido de que es poco probable que sea E / S (siempre que la base de datos sea otro cuadro, una base de datos lenta no debería causar un 100% de CPU en los servidores web). Necesitas mirar más cerca de casa.
fuente