首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用HTTP.sys调试缓冲?

如何使用HTTP.sys调试缓冲?
EN

Stack Overflow用户
提问于 2015-04-03 20:43:38
回答 1查看 844关注 0票数 1

我正在运行Windows8.1,并且我有一个集成测试套件,它利用HostableWebCore来划分孤立的ASP.NET web服务器进程。出于性能原因,我一次启动其中的8个,一旦启动,我会向每个用户发送一个非常简单的web请求,由加载到每个应用程序中的MVC应用程序来处理。每个实例都在不同的端口上侦听。

问题是这些请求在HTTP.sys (或者现在被称为什么)中被阻塞了(我相信)。如果我查看fiddler,我可以看到所有8个请求都立即(在几毫秒内)到达了ServerGotRequest状态。但是,请求在这种状态下停留20-100秒,这取决于每次并行运行的次数。

我怀疑这是HTTP.sys问题的原因是,我不得不等待其中任何一个响应的时间随着并行的托管应用程序数量的增加而增加。如果我只启动一个托管应用程序,它将在20秒内开始响应。如果我旋转2,它们都会在30秒内开始反应。如果我旋转4秒~40秒。如果我旋转8秒~100秒(这是默认的WebClient请求超时)。

由于这样长的延迟,我有足够的时间附加调试器并在控制器操作中放置一个断点,在20-100秒的延迟之后,该断点将被击中,这意味着我的进程还没有收到请求。所有的主机在冷启动后的20-100秒内都处于空闲状态。所有的主机似乎都同时收到请求,好像有什么东西阻止了任何请求的通过,然后突然让一切都过去了。

我的问题是,我无法找到与如何调试HTTP.sys有关的任何信息。我怎么能看到它在做什么?是什么导致了封锁?为甚麽要等待工人提出要求呢?为什么他们都在一起?

或者,如果有人知道我如何解决这一问题,并让请求立即通过(没有等待),我将非常感激。

另一个注意事项:我可以看到系统(PID 4)立即注册,以侦听我指定的端口,一旦主机应用程序启动。

附加信息:这是我的一个托管应用程序在netsh http show servicestate下的样子

代码语言:javascript
复制
Server session ID: FD0000012000004C
    Version: 2.0
    State: Active
    Properties:
        Max bandwidth: 4294967295
        Timeouts:
            Entity body timeout (secs): 120
            Drain entity body timeout (secs): 120
            Request queue timeout (secs): 120
            Idle connection timeout (secs): 120
            Header wait timeout (secs): 120
            Minimum send rate (bytes/sec): 150
    URL groups:
    URL group ID: FB00000140000018
        State: Active
        Request queue name: IntegrationTestAppPool10451{974E3BB1-7774-432B-98DB-99850825B023}
        Properties:
            Max bandwidth: inherited
            Max connections: inherited
            Timeouts:
                Timeout values inherited
            Logging information:
                Log directory: C:\inetpub\logs\LogFiles\W3SVC1
                Log format: 0
            Number of registered URLs: 2
            Registered URLs:
                HTTP://LOCALHOST:10451/
                HTTP://*:10451/

Request queue name: IntegrationTestAppPool10451{974E3BB1-7774-432B-98DB-99850825B023}
    Version: 2.0
    State: Active
    Request queue 503 verbosity level: Basic
    Max requests: 1000
    Number of active processes attached: 1
    Controller process ID: 12812
    Process IDs:
        12812
EN

回答 1

Stack Overflow用户

发布于 2015-04-03 21:32:48

回答这个主要是为了后人。原来我的问题不是HTTP.sys,而是ASP.NET。当它试图编译文件时,它打开了一个共享锁。此共享锁由System.Web.HttpRuntime.AppDomainAppId标识。我相信,由于我的所有应用程序都是由一个通用的applicationHost.config文件动态构建的,所以它们都具有相同的AppDomainAppId (/LM/W3SVC/1/ROOT)。这意味着它们都共享一个锁,并且所有的页面编译实际上都是按顺序进行的。然而,由于锁的来来去去,所有的页面都倾向于同时完成,因为它们中的任何一个都不太可能以及时的方式结束过程,从而使它们几乎同时完成。一旦他们中的一个通过,其他人很可能是紧跟在后面,然后就结束了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29439420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档