1

以下文章所述,一些 .NET 应用程序池在第一次请求时变得非常慢(大约 x4 倍)。问题仅涉及应用程序池。其中一些速度很慢,而另一些则不在相同的条件下:Web 应用程序、配置、文件权限等。

所以我的问题是,这怎么会发生?一个应用程序池如何比具有相同设置的另一个应用程序池慢,即使在重新启动它们之后,有没有办法修复/防止它?一旦应用程序池变慢,它就不会再次变快,即使停止和启动它也是如此。

我确保在每次测试之前回收应用程序池,以便所有测试都是“第一次请求”。

我发现了同样的问题,想知道这里是否有人找到了解决这个奇怪问题的方法?

请注意这不是asp.net初始化速度的普遍问题。我们将同一服务器上的相同代码与两个应用程序池进行比较:通用(快速)和损坏(慢)。在两个相同(相同)的微不足道(没有任何数据库访问等)之间切换两个应用程序池(相同的设置,但一个不合理的“慢”)测试 asp.net 应用程序改变它们的行为:一个启动非常慢,另一个 - 不是。

问题是:

  • 为什么应用程序池突然坏了(慢)?
  • 如何避免应用程序池变得“慢”?
  • 如何修复损坏的应用程序池?是的,我们可以创建无限的新应用程序池,但无论如何,这对于生产环境来说是奇怪且不可接受的。

UPD:我注意到这个问题甚至不限于“慢”应用程序池本身,而是它的名称!如果您重命名“慢”应用程序池,它将再次变为“快”。如果您创建名为以前重命名(或删除)“慢”的新应用程序池,则此应用程序池再次变慢!

4

3 回答 3

2

我有一个类似的问题,我有一个应用程序池正在生成 WCF 错误,说它处于故障状态。我尝试创建一个新的应用程序池并测试相同的代码,它运行良好。然后我删除了旧的应用程序池并将新的应用程序池重命名回旧的应用程序池,问题又回来了!所以似乎有一些东西被保存在与应用程序池相关的某个地方,当应用程序池被删除时,这些东西不会被删除。很奇怪..通过将它重命名为其他任何东西,它又可以工作了。但是如果我把它改回原来的名字,它就会抛出错误!我只是希望我们不必不断更改应用程序池名称..

于 2013-04-10T13:54:41.423 回答
1

哈哈。这有点像当您启动拉式割草机时。执行初始请求并初始化数据库需要一些时间。我们过去每次在共享点服务器上执行 IIS 重置时都会注意到这一点。它必须获取 web.config,连接到数据上下文或数据库,在站点开始发出请求之前做很多事情。一旦运行并拥有所有组件和运行时,尽管它很顺利。进行需要在夜间或下班时间进行 iisreset 的维护通常是好的,因此当用户第一次启动时,它会更快。您想要的最后一件事是您的 CEO 或副总裁,成为第一个访问您的网站的人。

附带说明一下,您拥有的应用程序池越多,占用的内存就越多。我知道使用 SharePoint 应用程序池,每个池占用 250MB 内存。减轻使用量和资源消耗的最佳选择是将其分配到多个 Web 服务器场/集群中,该集群对请求执行某种轮询或负载平衡。在给定点点击的用户越多,初始请求的速度就越慢。

于 2013-04-02T15:25:37.800 回答
0

默认情况下,应用程序池设置为在一段时间后回收。我认为默认是 20 分钟。回收后,必须在第一次请求时重新加载。这可能就是你正在经历的。

于 2013-04-02T15:25:34.643 回答