【问题标题】:IIS Worker process hangs forever on first requestIIS Worker 进程在第一次请求时永远挂起
【发布时间】:2012-05-24 12:50:21
【问题描述】:

我正在努力解决我这几天遇到的问题。每次我的一个网站被重建或 AppPool 被回收时,第一个页面加载将永远挂起(好吧,我只等了 30 分钟)。它只发生在大约 10 个站点中的一个特定站点上。这是一个 ASP.NET 网站。

以下是我观察到的事情:

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

我在 IIS 故障排除方面缺乏经验,但数小时的搜索使我一无所获。

我们最近在网站上所做的唯一主要代码更改是我们已经开始使用 log4net 实现日志记录。我已经尝试从我的 web.config 文件和 Global.asax 中删除任何 log4net 代码 - 仍然没有运气。

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

我们将不胜感激。

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

最终编辑:

我觉得自己像个白痴。我无法解释为什么,但由于某种原因,我在 Global.asax 中的断点突然被击中,我能够确定问题所在。这是通过 Entity Framework 对数据库的调用,编写得很糟糕 - 即过滤是在获取相关列中的所有行之后完成的。更糟糕的是,过滤是在 foreach 循环中完成的。不管怎样,现在一切都恢复正常了,我很高兴。

【问题讨论】:

    标签: asp.net iis worker-process


    【解决方案1】:

    可能说明了显而易见的问题,但您在 app_start 的全局 asax 中没有任何可能导致此问题的愚蠢代码?

    听起来像是无限循环之类的?

    【讨论】:

    • 不,不幸的是它似乎没有那么简单。如果我将调试器附加到网站使用的应用程序池并在 app_start 的第一行放置一个断点,它将不会被命中。所以它甚至没有进入方法。
    • 标记为答案,因为实际上是一些愚蠢的代码导致了它。我用原因编辑了我原来的问题。
    【解决方案2】:

    简单记录一下我的情况:

    Process MonitorFailed Request Tracing 都没有任何帮助。该网站只是(几乎)永远加载。

    终于等了几分钟后出现了一个错误,提示“找不到网络路径”。

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2020-08-31
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多