Como fazer com que o aplicativo ASP.NET seja reciclado quando OutOfMemoryException é lançado

Como fazer com que o aplicativo ASP.NET seja reciclado quando OutOfMemoryException é lançado

Eu tenho um aplicativo ASP.NET (.NET framework 4.8) que roda no IIS no Server 2019. Aconteceu algumas vezes nas últimas semanas que um cliente tentou fazer alguma operação no site que requer um grande bloco de memória. O tempo de execução do ASP.NET não consegue encontrar um bloco tão grande na memória e lança OutOfMemoryException. O site continua funcionando, mas algumas páginas estão funcionando e outras não. A integridade do pool de aplicativos do IIS parece que está tudo bem, mas na realidade a maior parte do site não funciona até que eu recicle manualmente o pool.

O pool de aplicativos já tem reciclagem definida quando os bytes privados estão acima de alguns GB, mas ao observar o processo w3wp quando o site não está funcionando, ele está usando apenas algumas centenas de MB. Existe alguma maneira de dizer ao ASP.NET ou ao IIS para reciclar quando essa exceção for lançada?

Responder1

Isso precisa ser monitorado e tratado externamente no IIS e no seu aplicativo. Provavelmente há uma exceção no log de eventos do aplicativo que uma tarefa agendada pode usar como gatilho para parar/iniciar o pool de aplicativos na linha de comando.

Esta também parece ser uma configuração de coleta de lixo bastante básica. No mínimo, todos os aplicativos devem ser configurados para o GC do servidor.

Além disso, provavelmente existe um código que pode ser adicionado para facilitar uma verificação de integridade adequada. Há anos é um procedimento padrão que uma verificação de integridade do balanceador de carga use uma página que força o uso do .NET Framework. Essa verificação de integridade deverá falhar se o pool de aplicativos falhar devido a uma exceção de falta de memória.

informação relacionada