【问题标题】:IIS Orphaned RequestsIIS 孤立请求
【发布时间】:2014-09-09 19:56:34
【问题描述】:

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

没有办法执行这么长时间,而且我似乎无法重现该问题。我曾尝试转储 w3wp.exe、使用 FRT 以及所有这些好东西,但我有一些一般问题:

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

【问题讨论】:

  • 如果有人偶然发现这一点,#4 的答案是,如果它不在配置中,它依赖于默认值,并且许多设置都在 IIS 本身中。对于 queuemax,您可以在服务器节点 --> asp -->“限制属性”部分进行设置,对于每个处理器的线程也是如此,这是我一直在寻找的另一个设置。

标签: debugging iis iis-7 asp-classic w3wp


【解决方案1】:

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

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

If Not Response.IsClientConnected Then Call Response.End()

您还可以在您的代码中全局搜索 Server.ScriptTimeout 以了解滥用的来源。

如果您确实想更改默认脚本超时,这里是它的存储位置: https://www.iis.net/configreference/system.webserver/asp/limits

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

【讨论】:

  • 谢谢,这给了我一些工作机会。对于 Response.IsClientConnected,它是如何工作的?如果代码在线,比如 1200,并且那里运行了很长时间,它怎么会到达 1201 行来执行那个条件呢?如果它可以到达 1201 行,那么它就不会被卡住。我错过了什么吗?
  • @Shalom:一般来说,诀窍是在代码中找到足够低的点,以使每个“行”都是一个短时间运行的任务。有时您可能需要重新设计一下。例如;如果您有一行复制 1000 个文件并返回。您可能需要重写该代码以在循环中一次复制一个文件。然后您可以在该循环中添加 IsCliientConnected。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多