为什么甚至回收应用程序池?

时间:2009-01-21 09:17:25

标签: iis web-applications webserver application-pool recycle

也许有人可以对这个简单的问题有所了解:

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

我一直在检查我的应用程序池上的设置,并开始想知道为什么我甚至经常回收(每1,000,000个电话或2个小时)。

什么会阻止我将自动回收设置为每24小时甚至更长时间?为什么不完全删除该选项,只是在内存旋转失控的appdomain时才回收?

3 个答案:

答案 0 :(得分:8)

如果您的应用程序可靠运行的时间更长,那么为应用程序池回收设置的阈值,则无论如何都会增加阈值。如果您的应用程序稳定,则没有任何缺点。

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

答案 1 :(得分:6)

从可靠性的角度来看,您应该考虑回收利用。根据历史数据,您应该知道您的应用程序使用了多少内存,CPU等,以及历史模式以及何时开始出现问题。知道这一点,您可以配置回收以解决这些问题。例如,如果您知道您的应用程序内存使用模式不断增加*会导致应用程序在几天后耗尽内存,那么您可以将其配置为在发生之前进行回收。

*显然,如果可能的话,您也希望解决此问题,但可以使用回收来提高客户的可靠性

答案 2 :(得分:4)

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

任何未能实现IDisposable的代码都会在回收上运行终结器,这可能会释放所持有的资源。