Iis 为什么还要回收应用程序池?

Iis 为什么还要回收应用程序池?,iis,web-applications,webserver,application-pool,recycle,Iis,Web Applications,Webserver,Application Pool,Recycle,也许有人能解释一下这个简单的问题: 我有一个经过彻底审查的.NETWeb应用程序。每次启动时,它都会为每个appdomain(进程)加载一个缓存,并且在完成此缓存加载之前无法完全回复请求 我一直在检查我的应用程序池的设置,并开始思考为什么我会如此频繁地循环使用(每1000000次调用或2小时一次) 什么会阻止我将自动回收设置为每24小时一次,甚至更长?如果appdomain的内存旋转失控,为什么不完全删除该选项并循环使用呢?这样做的原因是应用程序可能“无法工作”,即使它的CPU和内存都很好(想想

也许有人能解释一下这个简单的问题:

我有一个经过彻底审查的.NETWeb应用程序。每次启动时,它都会为每个appdomain(进程)加载一个缓存,并且在完成此缓存加载之前无法完全回复请求

我一直在检查我的应用程序池的设置,并开始思考为什么我会如此频繁地循环使用(每1000000次调用或2小时一次)


什么会阻止我将自动回收设置为每24小时一次,甚至更长?如果appdomain的内存旋转失控,为什么不完全删除该选项并循环使用呢?

这样做的原因是应用程序可能“无法工作”,即使它的CPU和内存都很好(想想死锁)。应用程序回收是最后一个故障保护措施,可以保护有缺陷的代码不致消亡


此外,任何未能实现IDisposable的代码都将在回收上运行终结器,这可能会释放保留的资源

您可能应该从可靠性的角度考虑回收利用。根据历史数据,您应该知道应用程序使用了多少内存、CPU等,以及历史模式和故障开始出现的时间。知道了这一点,您可以配置回收以应对这些问题。例如,如果您知道您的应用程序的内存使用模式*不断增加,导致应用程序在几天后内存不足,您可以将其配置为在发生这种情况之前进行回收


*显然,如果可能的话,您也希望解决此错误,但是回收可以用于提高客户的可靠性

如果您的应用程序可靠运行的时间长于为应用程序池回收设置的阈值,那么请务必提高阈值。如果你的应用程序是稳定的,那就没有什么坏处了

对于我们来说,我们已经完全关闭了回收,取而代之的是一个每分钟加载一个测试页面的任务,如果它连续五次加载失败,则运行一个iisreset