在 IIS 中有两个区域(嗯,不止两个)可以进行回收:
- 在“进程模型”部分下→“空闲超时”(默认 20 分钟)
和
- 在“回收”部分下→“常规时间间隔”(默认 1740 分钟)
我的问题是:
- 这两种方法有什么区别?
- 将它们设置为 0 的负面影响是什么?
在 IIS 中有两个区域(嗯,不止两个)可以进行回收:
和
我的问题是:
空闲超时是如果您的 Web 应用程序未要求任何操作,则该进程将丢弃并从内存中释放所有内容
回收是对应用程序的强制操作,您的处理程序已关闭并重新启动,用于内存泄漏目的和系统健康
两者的负面影响通常是使用您的 Session 并且如果您将 Recycle 弄乱到更快的时间,应用程序状态会丢失。(登录的用户等将被注销,如果他们将要“签出”所有内容丢失”这就是为什么回收的超时值如此之大,空闲超时无关紧要,因为无论如何都没有人登录,并且图 20 分钟无动作,他们仍然不是“购物”
积极的一面是摆脱空闲超时,因为如果您的网站不是一个高度活跃的网站,如果您每 20 分钟有一个用户,用户将不得不等待它加载,那么您的网站将在其“第一次”响应时响应更快说。因此,一个在 20 分钟内获得少于 1 次的网站实际上您可能希望增加此值,因为该网站必须为每个用户从头开始重新加载。但是,如果您长时间将此设置为 0,则代码中的任何内存泄漏都可能在一定时间内完全接管服务器。
从这里:
节省系统资源的一种方法是为应用程序池中的工作进程配置空闲超时设置。配置这些设置后,工作进程将在指定的不活动时间后关闭。空闲超时的默认值为 20 分钟。
另请检查为什么 IIS 默认应用程序池回收设置为 1740 分钟?
如果您的服务器上只有几个站点,并且您希望它们始终快速加载,则将其设置为零。否则,当您有 20 分钟没有任何流量时,应用程序池将终止,以便在下次访问时重新启动。问题是第一次访问应用程序池需要创建一个新的 w3wp.exe 工作进程,这很慢,因为需要创建应用程序池,需要加载 ASP.NET 或其他框架,然后您的应用程序需要被加载。这可能需要几秒钟。因此,我每次有机会都将其设置为 0,除非它是用于托管大量站点的服务器,这些站点并不总是需要运行。
IIS 现在有
Idle Time-out Action : Suspend
环境
挂起只是冻结进程,它比销毁进程更有效。
我继承了一个桌面应用程序,它调用 IIS 上的一系列 Web 服务。Web 服务(也)必须能够独立运行定时进程(无需打开客户端)。因此他们都有计时器。Web 服务计时器正在关闭(内存泄漏?)所以我们将空闲时间设置为 0 并且计时器保持打开状态。