HttpApplicationState阻止许多请求

时间:2018-07-03 17:14:08

标签: asp.net iis-7.5

我遇到了一个问题,多个请求(在AppPool关闭之前大约有300个)正在等待HttpApplicationState的写锁。这仅发生在我们的一台服务器上。在另一台服务器上,该站点可以正常运行,而无需进入这种状态。

我通过在windbg中查看w3wp转储发现了这一点。奇怪的是,在所有转储中都没有锁的“所有者”。这表示_l​​ock的值为-1,表示其为写锁,但_threadId为0。我想这可能是一种竞争条件,我在清除锁的同时创建了转储,但它发生在我拥有的所有转储中。

0:446> !DumpObj /d 05fc0088
Name:        System.Web.HttpApplicationStateLock
MethodTable: 21a64d00
EEClass:     21a71118
Size:        20(0x14) bytes
File:        C:\Windows\Microsoft.Net\assembly\GAC_32\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
010dc860  4001927        4         System.Int32  1 instance       -1 _lock
010dc860  4000274        8         System.Int32  1 instance        0 _recursionCount
010dc860  4000275        c         System.Int32  1 instance        0 _threadId

关于为什么它仅在一台服务器上发生,是否有某种环境会影响HttpApplicationState的性能

更新

在进一步检查之后,每个转储中都有一个线程在Lock上调用ReleaseWrite(),因此它正在被释放。如此多的请求正在等待如此快速的操作,这仍然是一种奇怪的行为。

0 个答案:

没有答案