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

13

也许有人可以解答这个简单的问题:

我有一个已经经过彻底审核的.NET Web应用程序。每当应用程序启动时,它会为每个应用程序域(进程)加载一个缓存,直到完成此缓存加载,它才能完全响应请求。

我一直在检查应用程序池上的设置,并开始想知道为什么我经常要进行回收(每1,000,000次调用或2小时回收一次)。

有什么原因阻止我将自动回收设置为每24小时甚至更长时间?为什么不完全删除选项并仅在应用程序域的内存失控时进行回收呢?

3个回答

8
如果您的应用程序在应用程序池回收设置的阈值之上可靠地运行,则可以增加阈值。如果您的应用程序稳定,那么没有任何缺点。
对于我们而言,我们完全关闭了回收,并且使用一个任务每分钟加载一个测试页面,如果连续五次加载失败,则运行iisreset。

6
您应该从可靠性的角度考虑回收。基于历史数据,您应该知道您的应用程序使用多少内存、CPU等等,以及历史模式和故障发生的时间。有了这些信息,您可以配置回收来解决这些问题。例如,如果您知道您的应用程序具有逐渐增加的内存使用模式,导致应用程序在几天后运行时内存不足,您可以在发生这种情况之前配置回收。
* 显然,您也希望尽可能解决此错误,但回收可用于提高客户的可靠性。

4
他们这样做的原因是即使应用程序的CPU和内存正常,它也可能“不工作”(想想死锁)。 应用程序回收是一种最终的故障保护措施,可以保护有缺陷的代码免于崩溃。
此外,任何未能实现IDisposable的代码都将在回收时运行终结器,可能释放持有的资源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接