Debugging IIS孤立请求

Debugging IIS孤立请求,debugging,iis,iis-7,asp-classic,w3wp,Debugging,Iis,Iis 7,Asp Classic,W3wp,我们有IIS 7运行一个经典的ASP应用程序,我最近注意到以下问题。在一天中,如果我查看服务器节点-->工作进程,一些请求似乎在那里被填满。过去的时间有点疯狂,就像一天结束时的12个小时。这要求所有人都坐在ExecuteRequestHandler阶段 任何事情都不可能持续那么长时间,我似乎无法重现这个问题。我尝试过使用FRT转储w3wp.exe,以及所有这些好东西,但我有一些一般性问题: 是否有控制IIS何时停止请求的设置?具体地说,在开发过程中,如果我故意将页面设计为缓慢(即更新一个锁定的S

我们有IIS 7运行一个经典的ASP应用程序,我最近注意到以下问题。在一天中,如果我查看服务器节点-->工作进程,一些请求似乎在那里被填满。过去的时间有点疯狂,就像一天结束时的12个小时。这要求所有人都坐在ExecuteRequestHandler阶段

任何事情都不可能持续那么长时间,我似乎无法重现这个问题。我尝试过使用FRT转储w3wp.exe,以及所有这些好东西,但我有一些一般性问题:

  • 是否有控制IIS何时停止请求的设置?具体地说,在开发过程中,如果我故意将页面设计为缓慢(即更新一个锁定的SQL表),然后关闭浏览器,并监视IIS中的请求,我会看到请求在被删除之前仍然存在大约20秒。这20秒是一个随机间隔,还是可以设置在某个地方?要清楚的是,并不是页面需要20秒才能执行,它将永远执行(在这个测试用例中),而是IIS似乎在我注销20秒左右后放弃了它
  • 是否有某种方式可以查看“孤立”请求,即应用程序池中没有人在等待的请求
  • 我还可以做些什么来尝试和调试它?w3wp的转储表示存在HTTP请求状态为HTR_READING_client_request的客户端连接
  • 我不断收到修改IIS配置设置(如AspRequestQueueMax)的建议,每次尝试在ApplicationHost.config中查找这些设置时,我都看不到设置的项目,因此可能是我查看的位置错误,或者配置中没有显式设置默认值。这就引出了两个问题:a)如何读取这些配置值,即获取当前值,b)如何设置这些值

  • 无论客户端是否连接,经典ASP请求将一直运行,直到达到脚本超时。我相信默认值是90秒,但是.ASP文件可以通过直接设置Server.ScriptTimeout属性来覆盖它(这是很常见的)。如果您的请求队列已满,那么这可能就是原因,更改默认值也无济于事

    如果可以编辑ASP代码,则可以在可能长时间运行的部分中添加如下逻辑:

    If Not Response.IsClientConnected Then Call Response.End()
    
    您还可以在代码中全局搜索Server.ScriptTimeout,以了解滥用的来源

    如果确实要更改默认脚本超时,请将其存储在以下位置:


    要通过IIS7 GUI进行更改,请转到:(网站)>(功能视图)>(“IIS”类别)>“ASP”>展开“限制属性”节点>“脚本超时”

    如果有人无意中发现了此问题,则对#4的回答是,如果它不在配置中,则依赖默认设置,并且许多设置都在IIS本身中。对于queuemax,您可以在服务器节点-->asp-->“限制属性”部分设置此设置,每个处理器的线程也是如此,这是我一直在寻找的另一个设置。谢谢,这让我可以使用它。对于Response.IsClientConnected,它是如何工作的?如果代码是在线的,比如说,1200,并且那里有一些长时间运行的东西,那么它将如何到达第1201行来执行该条件?如果它能到达1201线,那么它就不会被卡住。我遗漏了什么吗?@Shalom:一般来说,诀窍是在代码中找到足够低的点,使每个“行”都是一个短时间运行的任务。有时候你可能需要重新设计一下。例如如果有一行可以复制1000个文件并返回。您可能需要重写该代码,以便在循环中一次复制一个文件。然后可以在该循环中添加IsCliientConnected。