我在一个分布式的ASP.NET Web应用程序中遇到了一个异步处理程序的问题。首先让我解释一个使用案例:
- 该应用程序在安装有.NET Framework 4.5.2的Win 2012机器上使用IIS 8
应用程序通过web.config禁用了Session和身份验证模块,就像这样:
<system.webServer> .... <modules> <remove name="WindowsAuthentication" /> <remove name="Session" /> <remove name="FormsAuthentication" /> </modules> </system.webServer>
应用程序使用自定义异步Web处理程序来为特定请求提供服务
- 应用程序的流量非常大(每个服务器每分钟约50,000个请求,异步处理程序每个服务器每分钟约10,000个请求,所有这些请求都由NewRelic跟踪)
- 应用程序通过多个w3wp进程(2个w3wp进程)和多个虚拟服务器(约10个服务器)进行分发
- 应用程序具有大量连接
所有正常的(同步请求)都工作正常,但做更多工作的异步请求(这就是我们使用异步请求的原因)经常很慢,但NewRelic报告它很慢是因为“AcquireRequestState”。现在我在Google和Stack Overflow上查看过,这个事件与创建会话有关,但我们已经在web.config中禁用了会话。有人知道“AcquireRequestState”还能干什么吗?我们漏掉了一些删除会话状态的地方吗?将其从web.config添加到machine.config并没有起任何作用...
这是NewRelic中请求的代码片段:
**Slowest components Count Duration % **
AcquireRequestState 1 12,600 ms 100% --> WTF?
ExecuteRequestHandler 1 5.01 ms 0%
Integrated Pipeline 1 0.334 ms 0%
UpdateRequestCache 1 0.3 ms 0%
EndRequest 1 0.168 ms 0%
AuthenticateRequest 1 0.161 ms 0%
Total time 12,600 ms 100%
编辑:
我在 web.config 文件的 <system.web>
部分中有 <sessionState mode="Off" />
,所以不是这个问题。
编辑:我在web.config文件的<system.web>
部分中有<sessionState mode="Off" />
,所以它不是问题的原因。
<sessionState mode="Off">
在system.web
中。希望对您有所帮助... - EdSF