【发布时间】:2016-02-01 14:34:40
【问题描述】:
我在分布式 ASP.NET Web 应用程序中的一个异步处理程序存在问题。首先让我解释一个用例:
- 应用程序在带有 .NET Framework 4.5.2 的 win 2012 机器上使用 IIS 8
-
应用程序已像这样通过 web.config 禁用会话和身份验证模块
<system.webServer> .... <modules> <remove name="WindowsAuthentication" /> <remove name="Session" /> <remove name="FormsAuthentication" /> </modules> </system.webServer> 应用程序使用自定义异步 Web 处理程序来处理特定请求
- 应用程序的流量非常大(每台服务器每分钟大约有 50k 个请求,异步处理程序每台服务器每分钟大约有 10k 个请求,所有这些都从 NewRelic 跟踪)
- 应用程序通过多个 w3wp 进程(2 个 w3wp 进程)和多个虚拟服务器(大约 10 个服务器)分发
- 应用程序有大量连接
所有正常(同步请求)都工作正常,但做更多工作的异步请求(这就是我们使用异步请求的原因)通常很慢,但 NewRelic 报告说它很慢,因为“AcquireRequestState”。现在我查看了谷歌和堆栈溢出,这个事件与创建会话有关,但我们在 web.config 中禁用了会话。有谁知道“AcquireRequestState”还能做什么?我们是否缺少一些删除会话状态的地方?将其从 web.config 添加到 machine.config 没有任何作用...
这是来自 NewRelic 中的请求的 sn-p:
**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" />,所以不是这样。
【问题讨论】:
-
IINM,您没有加载模块,但 Session 仍然“启用”(默认) - 回复:
<sessionState mode="Off">insystem.webHth... -
我在 web.config 中有
所以不是这样。我将对其进行编辑以添加该信息 -
这个浏览器是特定的(仅限 IE)还是全部? ...找到这篇文章:forums.iis.net/t/1169137.aspx
-
你在 web.config 中有这个设置吗?:
<modules runAllManagedModulesForAllRequests="true"> -
@lord.fist 有没有更多的进展,因为我们每天会得到大约 10 个,如新遗物所示。与您类似的负载,但无法弄清楚可能导致这些异常值的原因。
标签: c# asp.net session asynchronous newrelic