2010-03-09 19 views
5

Estoy ejecutando una aplicación ASP.NET en un servidor IIS7. Ha funcionado bien durante mucho tiempo, pero durante la última semana ha estado descartando todas las sesiones de los usuarios varias veces al día. Permití todas las opciones de registro de reciclaje de grupos de aplicaciones como se describe en http://blogs.iis.net/ganekar/archive/2008/12/12/iis-7-0-application-pool-recycles-log-a-event-in-windows-event-log.aspx, pero no obtuve nada en el registro de eventos.¿Cómo puedo determinar por qué mi aplicación ASP.NET está reciclando?

No hay errores en el registro de eventos y no hay síntomas visibles, excepto que todos mis usuarios pierden sus sesiones.

¿Hay alguna otra razón por la que IIS reciclaría mi grupo de aplicaciones? ¿Hay algún otro tipo de registro que pueda habilitar para descubrir qué está sucediendo?

+0

Encontré algo más de información. Escribí un script para registrar el ID del proceso de trabajo de IIS cada hora.El problema de la sesión volvió a ocurrir esta mañana, pero cuando revisé el registro, mostró que el ID del proceso sigue siendo el mismo. Por lo tanto, no parece que esto esté sucediendo debido a un reinicio del proceso de trabajo. –

+0

Cargué Process Monitor en el servidor y utilicé las instrucciones de http://weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx para escribir una entrada de registro de eventos cada vez que finaliza la aplicación. Sucedió nuevamente hoy, y el mensaje registrado fue "Notificación de cambio de nombre de directorio para 'C: \ inetpub \ wwwroot \'. Cambio de directorio de JobTraQ o cambio de nombre de directorio." Process Monitor mostró muchos eventos de "NotifyChangeDirectory", pero no puedo decir de dónde vinieron. –

Respuesta

6

Cuando experimenta este comportamiento, ¿qué tan recientemente ha realizado una implementación de sus archivos en el servidor?

Hay una opción de configuración llamada desagradable numRecompilesBeforeAppRestart en la etiqueta de compilación:

<system.web> 
    <compilation debug="true" numRecompilesBeforeAppRestart="15"> 

http://msdn.microsoft.com/en-us/library/system.web.configuration.compilationsection.numrecompilesbeforeapprestart.aspx

por defecto este valor a 15. He pasado por una aplicación matando a las sesiones de los usuarios antes y esto era el culpable para mi Aproximadamente un día después de que se actualizara una aplicación web ligeramente usada (nuevos archivos copiados en el servidor, esto terminó sobrescribiendo CADA archivo, numerando en cientos), obtendríamos constantes reinicios de AppDomain evidenciados por todos los valores de la sesión para todos los usuarios desaparecidos.

yo encontramos este informe de error lista el comportamiento que estoy experimentando: http://support.microsoft.com/kb/319947

Aquí está el texto en cuestión realmente importante para mi escenario:

Sin embargo, este problema se produce cuando se carga muchos nuevos archivos .aspx o .ascx a el servidor (por ejemplo, 61 archivos). El servidor descarga la aplicación cuando los primeros 15 archivos se vuelven a compilar y cada vez son otros 15 archivos recompiladas hasta que el servidor alcanza 61. Esto da lugar a cuatro aplicaciones reanuda a pesar de que sólo una es necesaria .

Cambié el valor a 99999 y el problema desapareció. Esto significa que se acumulará más memoria en mi proceso de trabajo, así que agregué un reciclado diario (3am cuando mi sitio no tiene usuarios) a la configuración de reciclaje de IIS AppPool.

+0

+1 buen enlace ... – slugster

+1

Esperemos que ahora que está en SO, será más fácil de encontrar a través de Google. –

+0

Ese fue un artículo interesante, pero mi problema es diferente. Ese error parece implicar múltiples reinicios de aplicaciones en un corto período de tiempo después de una gran actualización. Nuestra última actualización fue hace aproximadamente una semana, y los reinicios parecen ocurrir a lo largo de periodos de tiempo más largos. –

0

Puede establecer opciones en la metabase para registrar los diferentes tipos de eventos de reciclaje en el registro de eventos.

Para IIS 6.0, consulte http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/87892589-4eda-4003-b4ac-3879eac4bf48.mspx

Por ejemplo, para habilitar el registro de eventos de reciclaje debido a la superación de la memoria privada, ejecutar esta en su servidor web:

cd %systemroot%\inetpub\adminscripts 
cscript.exe adsutil.vbs set w3svc/AppPools/YOUR_APP_POOL_NAME/AppPoolRecyclePrivateMemory true 

Aquí hay un enlace a [diferentes] instrucciones para IIS 7.0: http://technet.microsoft.com/en-us/library/cc771318%28v=ws.10%29.aspx

Cuestiones relacionadas