我有一个奇怪的情况,其中一个应用程序导致IIS(7.0)请求队列填满。请求不会在30秒后终止,因为它们应该是。然后,这将从池中获取所有数据库连接,并使该应用程序无用(其他应用程序不受影响)。
我不知道a)为什么他们首先停滞不前,以及b)为什么IIS让他们坐在那里而不是杀死他们。我猜我的应用程序正在锁定一些东西,也许是GC试图回收的东西。
我的问题是我从哪里开始调试这样的问题?我不知道。它目前仅在生产中发生,但在所有Web服务器上合理定期(可能每4小时一次)。
PS:有可能有一个论点认为这个问题在服务器故障上比在SO上更好,但鉴于我认为这是应用程序的开发问题而不是管理员问题,我现在已经开始使用SO了。如果需要,我很乐意重新发布。
答案 0 :(得分:0)
使用WinDbg作为参考是我使用的解决方案。一旦请求排队,我就将WinDbg附加到应用程序池的w3wp进程。然后我可以在每个进程中查看调用堆栈,尽管它们中的大多数都在等待ResourceManager内的锁定。
我仍然不知道它为何锁定,我认为ResourceManager是线程安全的。我重写了一些代码来缓存ResourceManager在另一个类中的输出,这似乎是为了避免锁定。