应用程序池启动模式:OnDemand 与 AlwaysRunning,哪个最好?

use*_*552 8 iis asp.net-mvc worker-process application-pool

我的应用程序池一直使用 OnDemand 启动模式,但最近我听说 AlwaysRunning 模式,它允许部署到 IIS 的 ASP.NET 应用程序在部署后立即可用。启用此功能似乎会导致 IIS 在部署应用程序后立即启动应用程序,从而消除 \xe2\x80\x9ccold 命中 \xe2\x80\x9d 到网站所需的预热时间。这篇精彩的文章对此进行了解释。

\n

下面是我有一些疑问并且想了解一下:

\n
    \n
  1. 使用 AlwaysRunning 功能,回收应用程序池时\n会发生什么情况?使用的内存被删除并释放?工作进程\n被终止并再次启动,或者它们在内存中继续可用,并且它们使用的内存没有被删除和释放?

    \n
  2. \n
  3. OnDemand 和\nAlwaysRunning 的优点和缺点是什么?哪个更适合单个工作进程,哪个更适合网络花园(多个工作进程)?

    \n
  4. \n
  5. 另外,有人可以解释一下将\nAlwaysRunnig 与进程空闲超时和空闲\n超时操作和回收结合使用时网站的行为吗?点播也是如此。我想\n清楚地了解所有这些部分在这些场景下如何相互干预\n(AlwaysRunning 和 OnDemand)。

    \n
  6. \n
\n

Jal*_*hal 16

1)当您设置应用程序池始终在回收时运行时,它将删除正在运行的工作进程并再次启动它。

\n

2) 如定义所述,如果您设置始终运行 IIS,则在 IIS 启动或创建应用程序池时立即启动应用程序池的工作进程。

\n

OnDemand-> IIS 将在收到第一个 Web 应用程序请求时启动工作进程。

\n

始终运行的优点是用户请求资源后无需等待。OnDemand 的缺点是 w3wp 启动时有延迟。始终运行的缺点是内存被特定的工作进程占用。

\n

在我看来,对于网络花园环境设置来说,始终运行是一个更好的主意。

\n

3)挂起只是冻结进程,比销毁进程效率高得多。默认情况下,IIS 在 20 分钟不活动后将应用程序池设置为 \xe2\x80\x9ctime-out\xe2\x80\x9d。因此,如果 20 分钟内\xe2\x80\x99 没有任何访问者访问您的站点,应用程序池将关闭 \xe2\x80\x93,从而释放这些系统资源。然后,下次请求进入站点时,IIS 将自动重新启动应用程序池并提供请求的页面。

\n

如果您希望您的蒸馏器始终设置为始终运行模式并且从不休眠,那么以下设置适合您:

\n
    \n
  • 将启动模式设置为 \xe2\x80\x9cAlways Running\xe2\x80\x9d。

    \n
  • \n
  • 将空闲超时(分钟)设置为 0。

    \n
  • \n
  • Set Preload Enabled = True(站点高级设置)

    \n
  • \n
  • 禁用应用程序池回收。

    \n
  • \n
\n