Pregunta

Tengo un sitio web ASP.NET 3.5 que se ejecuta bajo IIS7 en Windows 2008.

Cuando reinicio IIS (iisreset), luego golpeo una página, el inicio inicial es realmente lento.

Veo la siguiente actividad en Process Explorer:

  • w3wp.exe genera, pero muestra 0% de CPU actividad durante unos 60 segundos
  • Finalmente, w3wp.exe va al 50% de CPU para unos 5 segundos y luego la página cargas.

Tampoco veo ningún otro proceso usando CPU durante este tiempo. Básicamente se cuelga.

¿Qué está pasando durante todo ese tiempo? ¿Cómo puedo localizar lo que lleva todo este tiempo?

¿Fue útil?

Solución 4

Descubrí que hubo un retraso en la red al realizar una conexión inicial desde el servidor web front-end al servidor de la base de datos.

El problema era peculiar de Windows 2008 y nuestro hardware de red específico.

La resolución fue desactivar lo siguiente en los servidores web:

Otros consejos

Tuvimos un problema similar y resultó ser el tiempo de espera de Windows para verificar la revocación de los certificados de firma. Verifique si su servidor está intentando llamar en algún lugar (por ejemplo, crl.microsoft.com). ¿Quizás tiene una configuración de proxy incorrecta? O un firewall en el camino? Finalmente determinamos que teníamos suficiente control sobre el servidor y no queríamos 'llamar a casa', por lo que simplemente deshabilitamos la verificación. Puede hacer esto con .NET 2.0 SP1 y posterior agregando lo siguiente a machine.config.

<runtime> <generatePublisherEvidence enabled="false"/> </runtime>

No estoy seguro si puede poner esto en su app.config / web.config.

El compilador Just-In-Time está convirtiendo IL en código nativo de máquina (ensamblaje) y puede esperar mientras ocurre toda la magia.

  

Al compilar el código fuente para   código administrado, el compilador traduce   la fuente en Microsoft intermedio   idioma (MSIL). Esto es un   Conjunto de instrucciones independiente de la CPU   que se puede convertir eficientemente a   código nativo. Microsoft intermedio   idioma (MSIL) es una traducción utilizada   como la salida de una serie de   compiladores Es la entrada a un   compilador justo a tiempo (JIT). los   Common Language Runtime incluye un JIT   compilador para la conversión de MSIL a   código nativo.

     

Antes del lenguaje intermedio de Microsoft   (MSIL) se puede ejecutar, debe ser   convertido por .NET Framework   compilador just-in-time (JIT) a nativo   código. Este es un código específico de CPU que   se ejecuta en la misma arquitectura de computadora   como el compilador JIT. En lugar de usar   tiempo y memoria para convertir todos los   MSIL en un ejecutable portátil (PE)   archivo a código nativo. Convierte el   MSIL según sea necesario mientras se ejecuta, luego   almacena en caché el código nativo resultante   es accesible para cualquier posterior   llamadas.

fuente

Esa es la compilación de páginas asp.Net en lenguaje intermedio + compilación JIT: solo ocurre la primera vez que se carga la página. (Consulte http://msdn.microsoft.com/en-us/library/ ms366723.aspx )

Si realmente te molesta, puedes evitar que ocurra compilando previamente tu sitio.

EDITAR: solo vuelva a leer la pregunta: 60 segundos es muy largo y esperaría ver algo de actividad del procesador durante ese tiempo. Verifique el EventLog para ver si hay errores / mensajes en los destinos del Sistema y la Aplicación. También intente crear un volcado por caída del proceso w3wp durante estos 60 segundos; existe la posibilidad de que reconozca lo que está haciendo mirando algunas de las pilas de llamadas.

Si se tarda exactamente 60 segundos cada vez, entonces es probable que espere a que se agote el tiempo; 60 segundos es un buen número redondo. Asegúrese de que tenga las conexiones adecuadas a los controladores de dominio, etc. ...

(Si hay algunas herramientas de diagnóstico de IIS que harían un mejor trabajo, entonces me temo que no estoy al tanto de ellas, esta pregunta podría ser más adecuada para ServerFault, lo anterior es un enfoque mucho más desarrollado por el desarrollador para solución de problemas :-p)

Más de 60 segundos suena sospechoso. Intenta ejecutar una página test.html para ver cuánto tiempo lleva eso. Eso aislará el papel de IIS7.

Luego cambie el nombre temporalmente de sus carpetas web.config, global.asax y de aplicación y pruebe una página test.aspx (página muy simple). Eso aislará ASP.NET.

Si ambos son rápidos (es decir, unos 10 segundos), entonces es su aplicación. Pero, si alguno de ellos es lento, entonces no es la aplicación y algo con el servidor en sí.

Este sombrero no tiene nada que ver con la compilación JIT. El compilador normal de C # compila su código detrás de los archivos (.aspx.cs) en lenguaje intermedio en un ensamblaje al inicio si este ensamblaje no existe o si los archivos de código han cambiado. El ensamblaje de su sitio web se encuentra en el '' bin '' carpeta de su sitio web.

De hecho, la compilación JIT se produce después de eso, pero esto es muy rápido y no tomará varios minutos. La compilación JIT ocurre en cada inicio de una aplicación .net y eso no tomará más de una vista segundos.

Puede evitar el colapso de su sitio web si implementa el ensamblaje del sitio web ya compilado (YourWebsite.dll) en la carpeta bin. También es posible implementar solo los archivos aspx y dejar el código detrás de los archivos (aspx.cs).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top