【问题标题】:Application intermittently holding requests open应用程序间歇性地保持请求打开
【发布时间】:2014-04-03 15:18:56
【问题描述】:

我有一个奇怪的情况,我的一个应用程序导致 IIS (7.0) 请求队列被填满。请求不会在 30 秒后被终止,因为它们应该是。然后,这会从池中获取所有数据库连接,并使该应用程序无用(其他应用程序不受影响)。

我不知道 a) 为什么他们一开始就停滞不前,以及 b) 为什么 IIS 让他们停在那里而不是杀死他们。我猜我的应用程序正在锁定某些东西,也许是 GC 试图回收的东西。

我的问题是从哪里开始调试此类问题?我不知道。它目前仅在生产中发生,但在所有 Web 服务器上合理地定期(可能每 4 小时一次)。

PS:可能有人认为这个问题在 serverfault 上比在 SO 上更好,但考虑到我认为这是应用程序的开发问题而不是管理员问题,我现在已经开始研究 SO。不过,如果需要,我很乐意在那里重新发布。

【问题讨论】:

  • 您可以先查看这是否发生在特定页面上。如果它们在不同的页面上,那么可能是数据库。

标签: asp.net asp.net-mvc-3 iis iis-7


【解决方案1】:

作为参考,使用 WinDbg 是我使用的解决方案。一旦请求排队,我将 WinDbg 附加到应用程序池的 w3wp 进程。然后我可以查看每个进程中的调用堆栈,尽管它们中的大多数都在等待 ResourceManager 中的锁。

我仍然不知道为什么它被锁定在那里,我认为 ResourceManager 是线程安全的。我重新编写了一些代码来将 ResourceManager 的输出缓存在另一个类中,这似乎可以避免锁定。

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多