IIS:空闲超时 vs 回收

110

在IIS中,有两个区域(实际上不止两个)可能发生回收:

  1. 在“进程模型”部分→“空闲超时”(默认20分钟)

  1. 在“回收”部分→“定期时间间隔”(默认1740分钟)

我的问题是:

  1. 这两种方法之间有什么区别?
  2. 将它们设置为0的负面影响有哪些?
4个回答

111

Idle Timeout表示如果您的网站应用程序没有进行任何操作,该进程将会关闭并释放内存中的所有内容。

Recycle是一个强制性的应用程序操作,在此操作中,您的进程被关闭并重新启动,以检测内存泄漏和系统健康状况。

两者的负面影响通常表现在Session和Application状态的使用丢失,如果您将Recycle设置为更快的时间(例如已登录的用户等),那么所有内容都将丢失。这就是为什么Recycle的超时值如此长的原因,空闲超时不重要,因为没有用户登录,而且如果20分钟没有活动,他们也不会继续“购物”。

正面的影响是可以消除空闲超时,这样您的网站在“首次”响应时会更快,如果您的网站不是高度活跃的站点,并且每20分钟只有1个用户访问,那么您可能希望增加此值,因为网站必须为每个用户重新加载。但是,如果将其设置为0并保持很长时间,代码中的任何内存泄漏都可能在一定时间后完全接管服务器。


谢谢!那很有道理。我的主要问题是“第一次加载”需要很长时间。我认为如果我将它们都设置为0,那么我就可以规避这个问题。然而,内存泄漏的问题是一个问题。有没有办法“回收”,然后“强制”请求,以便在回收后立即完成“第一次访问”?或者在凌晨2点安排回收,然后在凌晨2:30安排“第一次访问”?在IIS中有没有这样做的方法? - Ricky
@Ricky 我也遇到了首次加载时间过长的问题。你需要将应用程序池的 startMode 设置为 AlwaysRunning:http://msdn.microsoft.com/en-us/library/ee677285%28v=azure.10%29.aspx - Steve Hibbert
这对我也很有用:https://www.simple-talk.com/blogs/2013/03/05/speeding-up-your-application-with-the-iis-auto-start-feature/ - Steve Hibbert
3
如果会话被存储在进程中,它不会在回收时被复制。参见这里 - BornToCode
@Michael - 你提到的“空闲超时”是指如果您的Web应用程序没有任何操作,该进程将会停止并释放内存中的所有内容。这是否意味着,如果我的应用程序使用IMemoryCache在服务器的内存中存储数据,那么当它进入空闲状态时,这些数据也会被删除? - Josh Monreal

33

来自这里:

保留系统资源的一种方法是为应用程序池中的工作进程配置空闲超时设置。 当这些设置被配置后,工作进程会在指定的不活动期之后关闭。空闲超时的默认值为20分钟。

还要检查为什么IIS默认应用程序池回收时间设置为1740分钟?

如果您的服务器上只有几个站点,并且您希望它们始终加载快速,则将其设置为零。否则,当您有20分钟没有任何流量时,应用程序池将终止,以便在下一次访问时重新启动。问题在于,对应用程序池的第一次访问需要创建一个新的w3wp.exe工作进程,这很慢,因为需要创建应用程序池,需要加载ASP.NET或其他框架,然后需要加载您的应用程序。这可能需要几秒钟。因此,我在每次机会都将其设置为0,除非它是用于托管许多不必始终运行的站点的服务器。


8

IIS现在具有

空闲超时操作:挂起设置

挂起只是冻结进程,比销毁进程更有效率。


但我认为暂停进程的问题在于使用的内存不会被清除和释放。然而,终止进程可以解决这个问题,因此避免了内存泄漏等情况。 - Willy

1
我继承了一个桌面应用程序,它调用一系列运行在IIS上的Web服务。这些Web服务需要能够独立地运行定时进程(无需客户端)。因此,它们都有定时器。 由于Web服务定时器关闭(内存泄漏?),所以我们将空闲超时设置为0,定时器保持开启。

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