NewRelic,异步http处理程序和AcquireRequestState

lor*_*ist 22 c# asp.net session asynchronous newrelic

我在分布式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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 应用程序使用自定义异步Web处理程序来提供特定请求

  • 应用程序的流量非常大(每台服务器每分钟大约有50k个请求,异步处理程序每​​个服务器每分钟有大约10k个请求,所有这些请求都来自NewRelic)
  • 应用程序通过多个w3wp进程(2个w3wp进程)和多个虚拟服务器(大约10个服务器)进行分发
  • 应用程序具有大量的连接

所有正常(同步请求)都正常工作,但执行更多工作的异步请求(这就是我们使用异步请求的原因)通常很慢,但NewRelic报告说它因"AcquireRequestState"而变慢.现在我看了谷歌和堆栈溢出,这个事件连接到创建一个会话,但我们在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%
Run Code Online (Sandbox Code Playgroud)

编辑:我<sessionState mode="Off" />在web.config(<system.web>部分),所以这不是它.

Pra*_* R. 0

AcquireRequestState 也由Profile Module使用。你尝试禁用它吗?

<modules>
   <remove others unwanted modules... />
   <remove name="Profile" />
</modules>
Run Code Online (Sandbox Code Playgroud)