IIS工作进程在第一个请求上永久挂起

3

我一直在解决一个问题,已经持续了几天。每次重建我的网站或回收应用程序池时,第一次加载页面将永远挂起(好吧,我只等了30分钟)。这仅发生在约10个站点中的一个特定站点上。这是一个ASP.NET网站。

以下是我观察到的情况:

  • 在IIS管理器中,在工作进程下可以看到请求。动词= GET,状态= ExecuteRequestHandler,模块名称= ManagedPipelineHandler。当然,经过的时间不断增加。
  • 如果我关闭最初发出请求的浏览器,然后打开一个新的浏览器发出另一个请求,页面将立即加载。
  • 在我的代码中,我的Global.asax文件的Application_Start没有在第一次请求时被调用。它会在第二个请求时被调用。
  • 工作进程会导致我的机器上的内存使用量飙升

我对排查IIS并不熟悉,但是数小时的搜索都没有结果。

我们最近在该网站上唯一进行的重大代码更改是开始使用log4net进行日志记录。虽然我尝试删除任何log4net代码,包括我的web.config文件和Global.asax,但仍然没有运气。

其他人有没有遇到过这种情况,如果有,您是如何解决的?

非常感谢任何帮助。

补充: 如果我将一个.txt文件放在站点的根目录中并将其作为构建后的第一件事加载,它将立即加载。 然而,工作进程仍然与以前完全相同,内存使用量仍然飙升。

最后编辑:

我感觉自己像个白痴。我无法解释为什么,但由于某种原因,我的Global.asax中的断点突然被命中,我能够确定问题。这是通过Entity Framework调用数据库时编写不良的(即,在获取有关该列的所有行之后进行筛选)。更糟糕的是,筛选是在foreach循环内完成的。无论如何,现在一切都恢复正常了,我很高兴。

2个回答

4
可能有点显而易见,但您的global asax中的app_start没有任何愚蠢的代码可能会导致这种情况吗?
听起来像是一个无限循环或者其他什么问题?

不幸的是,情况似乎并不那么简单。如果我将调试器附加到网站使用的应用程序池,并在app_start的第一行上设置断点,它将不会被触发。因此,它甚至没有进入该方法。 - AndersDaniel
标记为答案,因为实际上是一些愚蠢的代码引起的。我在原来的问题中编辑了原因。 - AndersDaniel

1

我只是简单地记录一下我的情况:

无论是进程监视器还是失败请求跟踪都没有帮助。网站只是一直(几乎)加载。

最终,等待了几分钟后,出现了一个错误,说明它“无法找到网络路径”。

原因是我输入了一个连接字符串到一个不存在的SQL Server实例,所以它在某种程度上一直在搜索该服务器。最终,发生了超时。

解决方案是在Web.Config中指定正确的SQL Server连接字符串。


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