如何在引发 OutOfMemoryException 时导致 ASP.NET 应用程序回收

如何在引发 OutOfMemoryException 时导致 ASP.NET 应用程序回收

我有一个 ASP.NET 应用程序(.NET Framework 4.8),它在 Server 2019 上的 IIS 中运行。在过去几周里,客户尝试在网站上执行一些需要大量内存块的操作,这种情况发生过几次。ASP.NET 运行时无法在内存中找到这么大的块,并抛出 OutOfMemoryException。该网站继续工作,但有些页面可以工作,有些则不能。IIS 应用程序池运行状况看起来一切正常,但实际上,在我手动回收池之前,网站的大部分内容都无法正常工作。

当专用字节超过几 GB 时,应用程序池已经设置了回收,但是当网站不工作时,查看 w3wp 进程时,它只使用了几百 MB。有没有办法告诉 ASP.NET 或 IIS 在抛出此异常时进行回收?

答案1

这需要从 IIS 和您的应用程序进行外部监控和处理。应用程序事件日志中可能存在异常,计划任务可将其用作从命令行停止/启动应用程序池的触发器。

这似乎也是一个相当基本的垃圾收集设置。至少,所有应用程序都应配置为服务器 GC。

此外,可能还可以添加代码以促进正确的健康检查。多年来,负载均衡器健康检查使用强制使用 .NET Framework 的页面一直是标准程序。如果应用程序池因内存不足异常而崩溃,则该健康检查必定会失败。

相关内容