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

标签 .net iis

我刚刚读了msdn中的博客,.Net 4.5.1引入了新的应用程序池设置“App Suspend”。在什么情况下,您要将应用程序池设置为“挂起”而不是“终止”,反之亦然?如果“挂起”空闲模式比“终止”设置好得多,那么为什么不默认为“挂起”并摆脱“终止”空闲模式呢?

最佳答案

IIS 6和更高版本使用应用程序池来服务网站。每个应用程序池基本上都是一个单独的工作进程,该进程将响应您在该应用程序池中拥有的任何网站的请求。它有助于将不同的网站彼此隔离(资源使用,错误,安全漏洞等)。

应用程序池的结构方式的一部分,默认情况下,它们经常“回收”或重新启动,以避免应用程序崩溃或重置内存泄漏。

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

  • 基于时间间隔(默认情况下,它设置为每29小时一次)
  • 无响应(由IIS检查应用程序性能来衡量)
  • 配置更改(更改web.config或应用程序池设置)

  • 回收不是什么大问题,因为IIS将在终止旧进程之前创建一个新进程并传输请求,因此在处理请求方面没有任何差距。 但是,对于应用程序池有一个设置,如果在一定时间内(默认为20分钟)内没有请求,该设置将完全终止该过程。

    当应用程序池关闭并收到新请求时,工作进程将启动,加载.NET框架,编译应用程序中的任何页面并最终为请求提供服务,这会明显延迟几秒钟。这被称为“冷启动”,可能会给您的用户带来不良的体验。

    如果您想要(我对多个大型应用程序都这样做),则可以禁用回收设置和基于超时的终止选项,但是如果您在一台服务器上运行很多站点而无法获得大量连续流量,您可以使用新的“暂停”选项来节省资源。

    IIS并未完全终止进程,而是将其移到了内存很低的状态。 这样,如果收到新请求,您的应用程序将立即启动。没有滞后。但是,当没有流量时,它只使用一小部分内存和CPU,因此服务器上没有任何开销。

    这实际上是用于服务器运行大量站点的共享环境。 如果您的流量恒定,那么您将不会注意到差异,因为应用程序池永远不会停止,但是如果您坚持默认设置,那么我强烈建议将应用程序池设置为挂起模式。 请注意,这需要Windows Server 2012 R2和.NET 4.5.1才能运行。

    这是一个Youtube视频,来自Visual Studio团队进一步对其进行了解释:
    https://www.youtube.com/watch?v=hXw5gyqTxoo

    关于.net - 应用程序暂停IIS应用程序池.Net 4.5.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119444/

    相关文章:

    c# - 无法识别 Serilog 的 AddSerilog

    c# - 用于替换除数字之外的所有字符的正则表达式

    c# - mscorlib.dll 中的 System.UnauthorizedAccessException

    IIS 6 缓存静态图像

    c# - 有人使用 CLI 后端为 gcc 编译器编译 lib x264 吗?

    c# - 为什么在添加到集合时不为所有对象调用 Equals()

    c# - 读取 CSV 文件并将值存储到数组中

    iis - 有人可以告诉我请求是如何在以下 IIS-Tomcat isapiredirect(2.0) 配置中路由的吗?

    iis - 如何启用对Web 服务的文件系统访问?

    iis - 作业停止运行?