2010-09-23 6 views
6

Nuestro proceso W3WP en nuestro servidor de producción es constantemente alto. No se maximiza al 100%, pero salta al 90% s un poco. Para ayudar a analizar esto, realicé un perfil de la aplicación en vivo usando JetBrains dotTrace.Detección de problemas de CPU W3WP con jetBrains dotTrace

Los resultados fueron los esperados. Todos los métodos lentos fueron NHibernate funciones que consultaron nuestra base de datos. Mi pregunta es, ¿estos métodos lentos afectarían de manera significativa a la CPU en nuestro servidor web, ya que nuestro servidor de base de datos está en una máquina separada? Seguramente si el servidor de la base de datos está haciendo algún trabajo, entonces el servidor web espera una respuesta, ¿y la CPU no debería subir?

Si este es el caso, ¿cómo utilizo dotTrace (u otra herramienta si es necesario) para determinar dónde se utiliza la CPU en lugar de esperar que el servidor responda desde otro lugar?

dotTrace captura de pantalla de los puntos calientes alt text

Se puede ver en la captura de pantalla que la mayoría de las veces es pasar la espera de peticiones HTTP externos para completar. Sin embargo, esto no debería afectar el uso de la CPU en el servidor web. Pensé

+0

¿Puede publicar algunas capturas de pantalla relevantes del perfil de dotTrace? –

+0

Agregué la captura de pantalla de la zona activa a la pregunta –

+0

¿Ha resuelto el problema? ¿Qué herramientas has usado para encontrar la fuente del mal? – Pavel

Respuesta

2

Puede ser que NHibernate haga el trabajo duro en su servidor web, y que la base de datos realmente esté haciendo relativamente poco.

Recomendaría ejecutar un generador de perfiles SQL para ver si realmente es el caso de que la base de datos esté tardando mucho tiempo en una sola llamada (desde NHibernate).

Supongo que verá que NHibernate realiza muchas llamadas a la base de datos y luego las procesa (en su servidor servidor erb) y que esto es responsable de la alta CPU.

Si tiene mucha recuperación lenta en las uniones, puede terminar en una situación en la que NHibernate hace que muchas, muchas llamadas a la base de datos obtengan los datos de una solicitud.

+0

Las consultas de la base de datos regresan con relativa rapidez, y he comprobado que solo estamos consultando la base de datos cuando es necesario. No me sorprende que las llamadas NHibernate tarden más tiempo, pero ¿tiene sentido que coincidan con la CPU alta? –

Cuestiones relacionadas