Tengo un problema de rendimiento en un sitio que hemos creado, y no estoy exactamente seguro de cómo comenzar a diagnosticarlo.
La breve descripción es: Tenemos un sitio muy pequeño ( http://hearablog.com ) con muy poco tráfico, en un servidor dedicado deficiente, la CPU siempre es muy alta, a veces se mantiene al 100% durante minutos, y w3wp.exe está tomando la mayor parte. Un escenario típico es que w3wp.exe toma el 60% y SQL Server toma aproximadamente el 30%. Nuestro DB también es bastante pequeño.
Descripción larga y más detalles:
El sitio está alojado en un servidor muy malo por Cari.Net. Desde el principio, tuvimos la sensación de que el servidor no se comportaba correctamente, ya que algunas cosas tomarían demasiado tiempo, por lo que esto podría ser un problema de configuración desde el principio. También puede ser que estemos obteniendo un servidor virtual mientras se supone que tenemos uno dedicado, aunque no tenemos evidencia que indique esto, excepto por el hecho de que el servidor tiende a ser bastante lento.
El servidor es Windows 2008 Standard de 64 bits, con SQL 2008 Express
El hardware es un Celeron 2.80 GHz, 1Gb RAM
El sitio web está desarrollado en ASP.Net MVC, utilizando Entity Framework para el acceso a datos.
Ahora, este es un hardware bastante malo, pero he tenido otros servidores con estos tipos, con HW equivalente (o peor), y el rendimiento es mucho mejor que este. Dicho esto, los otros servidores tienen W2003 y SQL2005, y estoy usando ASP.Net "WebForms" 2.0, sin MVC, sin LINQ, sin EF; así que no estoy seguro de si ir a 2008 / lo demás significa que se espera una gran penalización de rendimiento.
Estoy sirviendo archivos MP3 (5-20 Mb) regularmente, lo cual es una carga un poco inusual, ¿tal vez está causando algún tipo de problema?
¿Causaría eso que w3wp use mucha CPU?El uso del disco parece muy bajo. La memoria suele rondar el 90%, pero el uso del disco parece indicar que no está paginando demasiado.
Recibo toneladas de correos electrónicos todos los días sobre los tiempos de espera de SQL, para consultas que toman más de 30 segundos, aunque todas nuestras consultas son bastante sencillas (o deberían serlo, pero EF puede estar arruinándolo).
Así es como se ve el monitor de recursos en uno de estos "sprints" de 100% de CPU, en caso de que haya algo útil allí.
Y una instantánea de algunos contadores de rendimiento:
Ahora, lo que me confunde mucho es que el uso de CPU de w3wp es tan alto. Realmente no debería estar haciendo mucho ... Así que mis preguntas son ...
- ¿Hay alguna forma de descubrir "qué" está haciendo? ¿Quizás incluso perfilarlo?
- ¿Algún contador de rendimiento que debería mirar?
- ¿Es de esperar esto dada esta configuración de hardware / software?
- ¿Esto podría deberse a algún tipo de falla de configuración? ¿Dónde comenzaría a buscar?
Muchas gracias.
Daniel Magliola
fuente
Ok, para comenzar: el servidor es REALMENTE malo. Pero DEBE ser suficiente.
Para la virtualización, verifique sus controladores. No conozco ninguna plataforma de virutalización que oculte la CPU (y creo que alguien pone un hyper-v o esx en un celeron) pero los controladores para el disco, etc. son una indicación.
La CPU no debería ser tan alta. Lamentablemente, con esta RAM, estás bastante tostado: si comienzas a agregar un perfilador, prácticamente volarás la memoria que tienes.
Me gustaría:
Para las pruebas:
http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/
tiene algo de comienzo allí. Esto puede darle una pista en caso de que los problemas sean más - hm - "categorizables".
También mantendría registros de rendimiento a largo plazo. Tenga cuidado con su IO (segundos / lectura, segundos / escritura son prácticamente los únicos relevantes). Todo lo demás es demasiado inteligente, pero una vez que su IO comienza a tardar más de lo debido, los discos se quedan atrás.
Descartaría un problema de configuración en este punto, al menos como indicador principal. Algo agota sus recursos W3p, ahora necesita saber de qué se trata.
En general, este no es un servidor que me encantaría tener físico, es tan pequeño que no tiene sentido en mi humilde opinión tener una máquina allí. Virtual sería mejor;)
fuente
Podría intentar usar un programa llamado Process Explorer para monitorear subprocesos individuales que se ejecutan bajo el proceso w3wp. Debería permitirle ver qué hilo está causando todo el daño.
fuente
Tuve mucha suerte usando la herramienta de diagnóstico de depuración de Microsoft para volcar mi proceso w3wp y luego revisar los subprocesos y los rastros de la pila de las cosas que se estaban bloqueando. Incluso te dirá la página solicitada que generó el hilo que es SUPER agradable .
http://www.microsoft.com/en-us/download/details.aspx?id=26798
fuente
Estoy de acuerdo con TomTom en el futuro, especialmente sobre cómo obtener un mejor kilometraje de un Virtual en este momento. La depuración / creación de perfiles localmente para reducir el problema es lo correcto.
Voy a ponerme el sombrero y la capa Karnak The Magnificent y pediré el primer sobre. Rebelión Ram. ¿Qué obtienes cuando pones el sistema operativo, ASP.NET y un codicioso SQL Server Express en 1GB?
Creo que su problema es que SQL Server Express está utilizando toda la RAM disponible para un grupo de búferes y tarda en liberarlo. Consulte http://support.microsoft.com/kb/321363 para obtener más información. Además, IIS tiene una memoria caché predeterminada de 256 MB que puede necesitar ajustar ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Debug Diagnostics es una gran herramienta para solucionar este problema (bueno, probablemente un mazo).
http://technet.microsoft.com/en-us/library/bb742546.aspx es un artículo bastante decente para mirar. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e señala que el reciclaje del grupo de aplicaciones se volvió loco como otro posible problema.
fuente
Utilice el contador "Proceso" de Perfmon para ver los atributos individuales del proceso w3wp.exe. ¿Cuánto tiempo de CPU para el proceso de trabajo es el tiempo del kernel? Los tiempos de kernel altos podrían ser indicativos de paginación, pero usted dice que no está convencido. Otras posibilidades son los conductores duff. El proceso de trabajo tiene 23 hilos activos, lo cual es bueno, pero ¿qué están haciendo? Prueba el ProcessExplorer de SysInternals para investigar un poco más; También puede ver qué conexiones TCP / IP están en juego. No he usado SQL Express, pero tiene parámetros de ajuste de memoria, como su hermano mayor. ¿SQL está privando a IIS de memoria, causando paginación excesiva?
fuente
Puede que no esté totalmente relacionado, pero verifique si está usando NOLOCK en sus consultas. Podría ayudar en el caso de los tiempos de espera de SQL.
fuente