.NET 4.5.1中的App Suspend功能及其性能优化

在.NET 4.5.1版本中,引入了许多新特性,其中之一就是App Suspend功能。这个功能不仅可以使ASP.NET网站和Web应用程序的响应速度更快,还能让在不影响性能的情况下,在单个服务器上托管更多的网站。本文将解释App Suspend功能是如何工作的,如何在应用程序中实现它,以及使用它可以获得哪些好处。

什么是App Suspend?它是如何工作的?

App Suspend是在.NET 4.5.1中引入的,它实际上是建立在另一个.NET新特性——IIS Idle Worker Process Page-Out——之上的。IIS Idle Worker Process Page-Out选项是在IIS 8.5中引入的,它允许IIS“挂起”可能变为空闲的应用程序,而不是终止它们。这种挂起操作使得这些应用程序可以在将来被请求时非常快速地重新启动,而不是被终止,那样就需要服务器重新启动,经历一个“冷启动”。

当一个应用程序变为空闲时,如果启用了IIS Idle Worker Process Page-Out功能,该应用程序将保持活动状态,并被分页到磁盘中,而不是被终止。当它将来被请求时,该进程将被重新激活并立即可用。

可以看到App Suspend功能与传统的空闲超时操作的不同之处。这个功能的引入将允许服务器上运行的网站或应用程序存在三种不同的状态:

  • 非活动站点:完全未活动的站点。它们当前没有加载到内存中,当被请求时需要“启动”。这是站点在被访问之前默认的状态。
  • 活动站点:当前正在运行、被访问且未空闲退出的站点。它们正在积极使用系统资源,如内存和CPU周期。
  • 挂起站点:可能之前正在运行并通过App Suspend被“分页到内存”并挂起的站点,正在等待被“重新激活”。挂起的站点接收到的CPU周期和系统内存要少得多,这些可以分配给需要的其他活动站点。

根据服务器及其限制(例如物理内存),不仅可以让挂起站点的启动时间更快,还可以让在环境中运行“更多”的站点,因为挂起的站点占用的内存是活动站点的一小部分。这可能为当前托管大量站点的服务器带来巨大的好处,不仅在资源管理上,也在性能上。

如何启用App Suspend

像在IIS中大多数设置和更改一样,IIS管理器对话框可以很容易地找到特定的配置设置并使用它们。可以按照以下步骤在IIS中实现App Suspend:

  1. 打开IIS管理器(可通过控制面板 > 管理工具 > Internet Information Services (IIS) 管理器访问)。
  2. 在左侧点击想要目标的应用程序池。
  3. 在右侧右键点击想要启用App Suspend的应用程序池;从上下文菜单中选择“高级设置”选项。
  4. 找到“空闲超时操作”属性并将其设置为“挂起”。
  5. 可选:为了测试目的,可以将空闲超时(分钟)属性更改为一个非常短的时间段,以确保它正常工作。(可以检查事件查看器,看看应用程序是否正确地“挂起”)

预期效果

.NET团队的分析显示,通过这个简单的更改,他们的托管环境取得了杰出的成果,但两个主要好处可以归结为以下几点:

  • 显著增加的启动时间:可以合理地预期,使用App Suspend运行的应用程序的启动时间可以减少高达90%。
  • 改进的托管密度:由于挂起应用程序的存储方式,它们使用的资源是正常情况下的一小部分。这可以让增加多达7倍的站点数量,而不需要App Suspend。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485