应用程序池启动模式:OnDemand vs AlwaysRunning,哪一个更好?

8

我一直使用OnDemand启动模式来运行我的应用程序池,但最近听说了AlwaysRunning模式。它使得在ASP.NET应用程序部署到IIS之后立即可用。启用此功能似乎会导致IIS在部署应用程序时立即启动应用程序,从而消除了“冷启动”网站所需的预热时间。详见这篇优秀文章。

以下是我有些疑问,希望能够理解:

  1. 使用AlwaysRunning功能时,当应用程序池被回收时会发生什么?内存使用是否被移除和释放?工作进程是否终止并重新启动,还是它们继续保留在内存中而其内存使用未被移除和释放?

  2. OnDemand和AlwaysRunning有哪些优缺点?哪个对于单个工作进程更好,哪个对于Web Garden(多个工作进程)更好?

  3. 此外,有人能解释一下在使用AlwaysRunning的情况下,如何与进程空闲超时、空闲超时操作和回收一起使用?以及使用OnDemand时会出现相同的情况。我希望在这些情况下了解所有这些部分是如何相互干扰的(AlwaysRunning和OnDemand)。

1个回答

14
1) 当你将应用程序池设置为始终运行时,它会移除正在运行的工作进程并重新启动它。
2) 根据定义,如果你设置为始终运行,IIS会在启动时或创建应用程序池时立即启动工作进程。
按需启动-> 当收到对Web应用程序的第一个请求时,IIS会启动工作进程。
始终运行的优点是用户在请求资源后无需等待。按需启动的缺点是w3wp启动时会有延迟。始终运行的缺点是特定工作进程会一直占用内存。
在我看来,对于Web园环境,始终运行是一个更好的选择。
3) 暂停只是冻结进程,比销毁进程更高效。默认情况下,IIS将应用程序池设置为在20分钟的不活动后“超时”。因此,如果在20分钟内没有访问者访问您的站点,应用程序池将关闭 - 释放这些系统资源。然后,下次有请求进入站点时,IIS将自动重新启动应用程序池并提供所请求的页面。
如果你希望你的站点始终保持始终运行状态,不休眠,那么下面的设置适合你:
  • 将启动模式设置为“始终运行”。

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

  • 将预加载启用设置为True(站点高级设置)。

  • 禁用应用程序池回收。


挂起进程时,进程使用的内存是否被清除和释放? - Willy
1
@Ralph 一个被挂起的工作进程仍然保持活动状态,但被分页到磁盘上,从而减少了它消耗的系统资源。当用户再次访问该站点时,工作进程从挂起状态中唤醒,并且很快就可以使用。 - Jalpa Panchal
1
始终运行,空闲超时20分钟和挂起的组合会如何表现?我想其中一个必须具有优先权吧? - Thomas927

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