Tengo una aplicación ASP.NET (.NET framework 4.8) que se ejecuta en IIS en Server 2019. Sucedió varias veces durante las últimas semanas que un cliente intentó realizar alguna operación en el sitio que requiere un gran bloque de memoria. El tiempo de ejecución de ASP.NET no puede encontrar un bloque tan grande en la memoria y genera OutOfMemoryException. El sitio continúa funcionando, pero algunas páginas funcionan y otras no. Parece que el estado del grupo de aplicaciones de IIS está bien, pero en realidad la mayor parte del sitio no funciona hasta que recicle el grupo manualmente.
El grupo de aplicaciones ya tiene el reciclaje configurado cuando los bytes privados superan unos pocos GB, pero cuando se mira el proceso w3wp cuando el sitio no funciona, solo está usando unos pocos cientos de MB. ¿Hay alguna forma de decirle a ASP.NET o IIS que reciclen cuando se produce esta excepción?
Respuesta1
Esto debe ser monitoreado y manejado externamente desde IIS y su aplicación. Probablemente haya una excepción en el registro de eventos de la aplicación que una tarea programada podría usar como disparador para detener/iniciar el grupo de aplicaciones desde la línea de comandos.
Esto también parece una configuración de recolección de basura bastante básica. Como mínimo, todas las aplicaciones deben configurarse para el GC del servidor.
Además, probablemente exista un código que se pueda agregar para facilitar una verificación de estado adecuada. Ha sido un procedimiento estándar durante años que una verificación del estado del balanceador de carga utilice una página que fuerce el uso de .NET Framework. Esa verificación de estado debe fallar si el grupo de aplicaciones falla debido a una excepción de falta de memoria.