暂停应用程序池 - IIS 应用程序池 .Net 4.5.1 版本

7

我刚刚在MSDN读到一篇博客,介绍了.NET 4.5.1引入的新应用程序池设置“App Suspend”。在什么情况下您想将应用程序池设置为“挂起”,而不是“终止”,反之亦然?如果“挂起”空闲模式比“终止”更好,那么为什么不默认使用“挂起”并摆脱“终止”空闲模式呢?


你在SF上提问可能会更好。 - nphx
有任何评论吗? - user384080
1个回答

12

IIS 6及以上版本使用应用程序池来提供网站服务。每个应用程序池基本上都是一个单独的工作进程,可响应于该应用程序池中的所有网站的请求。它有助于将不同的网站隔离开来(资源使用、错误、安全漏洞等)。

应用程序池的结构方式之一,是默认情况下会定期“回收”或重新启动,以避免应用程序崩溃或重置内存泄漏。

导致应用程序池回收的三种主要方式如下:

  1. 基于时间间隔(默认为29小时一次)
  2. 无响应(通过IIS检查应用性能进行测量)
  3. 配置更改(更改web.config或应用程序池设置)

回收并不是什么大问题,因为IIS将在终止旧进程之前创建新进程并传输请求,因此在处理请求时没有间隙。然而,应用程序池有一项设置,如果没有请求达到一定时间(默认为20分钟),则会完全终止该进程。

当应用程序池关闭并有新请求进来时,那么工作进程需要几秒钟的 noticeable lag (明显延迟),才能启动、加载.NET框架、编译应用程序中的任何页面并最终服务于请求。这被称为“冷启动”,可能给您的用户带来不良体验。

如果您愿意,可以禁用回收设置和基于超时时间的终止选项(我会为几个大型应用程序这样做)。但是,如果您在单台服务器上运行许多网站,并且这些网站没有连续的流量,那么您可以通过使用新的“挂起”选项来节省资源。

IIS不再完全终止该进程,而是将其移动到非常低的内存状态。这样,如果有新请求进来,则您的应用程序会即时启动,没有延迟。但是在没有流量时,它只使用极小的内存分数和CPU,因此不会对您的服务器产生任何开销。

它真正适用于运行多个站点的服务器的共享环境。如果您有持续的流量,您不会注意到差异,因为应用程序池永远不会停止,但如果您坚持使用默认设置,则强烈建议将应用程序池设置为挂起模式。请注意,这需要同时具备Windows Server 2012 R2 和 .NET 4.5.1才能工作。

以下是Visual Studio团队的Youtube视频,进一步解释此问题: https://www.youtube.com/watch?v=hXw5gyqTxoo


还是没有得到答案!如果您将网站托管在专用物理机器上,并且只有一个网站应用程序和一个专用应用程序池,为什么不将应用程序池设置为挂起? - user384080
2
已经有答案了:
  • 如果您有连续的流量,应用程序池不会停止。
  • 如果您没有连续的流量,则可以禁用超时设置,以使应用程序池不会停止。
  • 但是,如果您没有持续的流量且保留了超时设置,则应用程序池将在设置为“终止”并且对站点进行新请求时完全关闭,这会使新请求变得更慢。将其设置为“挂起”将避免完全关闭,因此新请求不会花费太长时间。 如果选项可用,没有理由不将其设置为“挂起”。
- Mani Gandham
只是顺便提一下,因为帖子提到需要Windows Server 2012 R2和.NET 4.5.1,实际上这是IIS8.5的一个功能(所以如果你有IIS 8.0,你就没有这个选项...)请查看:http://www.iis.net/learn/get-started/whats-new-in-iis-85/idle-worker-process-page-out-in-iis85 - Cedric Dumont
Windows Server 2012 R2 预装了 IIS 8.5。 - Mani Gandham

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