在IIS中,有两个区域(实际上不止两个)可能发生回收:
- 在“进程模型”部分→“空闲超时”(默认20分钟)
和
- 在“回收”部分→“定期时间间隔”(默认1740分钟)
我的问题是:
- 这两种方法之间有什么区别?
- 将它们设置为0的负面影响有哪些?
在IIS中,有两个区域(实际上不止两个)可能发生回收:
和
我的问题是:
Idle Timeout表示如果您的网站应用程序没有进行任何操作,该进程将会关闭并释放内存中的所有内容。
Recycle是一个强制性的应用程序操作,在此操作中,您的进程被关闭并重新启动,以检测内存泄漏和系统健康状况。
两者的负面影响通常表现在Session和Application状态的使用丢失,如果您将Recycle设置为更快的时间(例如已登录的用户等),那么所有内容都将丢失。这就是为什么Recycle的超时值如此长的原因,空闲超时不重要,因为没有用户登录,而且如果20分钟没有活动,他们也不会继续“购物”。
正面的影响是可以消除空闲超时,这样您的网站在“首次”响应时会更快,如果您的网站不是高度活跃的站点,并且每20分钟只有1个用户访问,那么您可能希望增加此值,因为网站必须为每个用户重新加载。但是,如果将其设置为0并保持很长时间,代码中的任何内存泄漏都可能在一定时间后完全接管服务器。
来自这里:
保留系统资源的一种方法是为应用程序池中的工作进程配置空闲超时设置。 当这些设置被配置后,工作进程会在指定的不活动期之后关闭。空闲超时的默认值为20分钟。
还要检查为什么IIS默认应用程序池回收时间设置为1740分钟?
如果您的服务器上只有几个站点,并且您希望它们始终加载快速,则将其设置为零。否则,当您有20分钟没有任何流量时,应用程序池将终止,以便在下一次访问时重新启动。问题在于,对应用程序池的第一次访问需要创建一个新的w3wp.exe工作进程,这很慢,因为需要创建应用程序池,需要加载ASP.NET或其他框架,然后需要加载您的应用程序。这可能需要几秒钟。因此,我在每次机会都将其设置为0,除非它是用于托管许多不必始终运行的站点的服务器。
IIS现在具有
空闲超时操作:挂起
设置
挂起只是冻结进程,比销毁进程更有效率。
IMemoryCache
在服务器的内存中存储数据,那么当它进入空闲状态时,这些数据也会被删除? - Josh Monreal