0

操作系统:Windows Server 2012 标准

IIS:8.0.9200.16384

处理器:4x Xeon 2.67Ghz CPU

内存:40GB

问题:

我们最近启用了 IIS 的自动启动功能,因为这样做,我们的应用程序池的启动时间大大增加了。应用程序池似乎正在运行,但它似乎在大约 30 分钟内将其 CPU 使用率提高到最大 25%,并且在该池中运行的网站在此完成之前不会响应。我们检查了事件日志,似乎没有任何故障。我们已经检查了预加载功能中的日志记录,这似乎只需要大约 60-90 秒。

我们如何诊断导致应用程序池启动延迟的原因?

背景:

我们从多个应用程序池(每个池 20 个站点)提供同一个 ASP.Net MVC3 应用程序的多个副本。我们有大约 8 个池为 160 个站点提供服务。我们构建了 IProcessHostPreloadClient,它会在站点启动时从数据库中预加载一些设置。我们有第二台服务器,其基本规格相同,但只有 3 个 20 个池,每个池只需大约 5 分钟即可启动。

4

1 回答 1

0

对于任何对此感兴趣的人,我们为解决/缓解该问题所做的工作:

  1. 将我们的站点分成每个应用程序池的更小的分组(这减少了每个应用程序池的启动时间)。我们每个池有 10 个站点。
  2. 更改为使用 IIS 8 Application Initialize 'PreloadEnabled' 选项而不是 serviceAutoStartProvider 进行站点初始化。
  3. 部署新代码时,不要重新启动应用程序池,而是使用 app_offline.htm 功能卸载应用程序并重新启动它。

app_offline.htm 功能对我们来说是关键,这意味着我们能够部署我们的软件的新版本,而无需停止和启动应用程序池并导致启动时间损失。此外,逐步重新启动应用程序池有助于减少 CPU 的压力,这意味着我们为每个池获得了一致的启动时间。仅当我们进行 IIS 重置或服务器重新启动时(很少)才需要这样做。

于 2013-10-24T21:26:14.537 回答