【问题标题】:Diagnosing "Request timed out" HttpExceptions诊断“请求超时”HttpExceptions
【发布时间】:2010-10-01 07:19:07
【问题描述】:

在 StackOverflow 上,我们每天都会看到一些“请求超时”异常。

事实:

  • 请求超时默认为 90 秒
  • 仅在 POST 上发生
  • 发布的数据是文本,通常很小 (
  • 在服务器变量中未捕获任何表单数据
  • 客户端 UA 多种多样:IE5.5 - 7、Firefox 3.0.5、iPhone、Chrome
  • 客户地点多种多样:英国、法国、美国 - 北卡罗来纳州、俄亥俄州、内布拉斯加州、印第安纳州

我们已经测试了基于服务器的超时(即使用 Thread.Sleep)并且所有表单变量都被正确捕获在异常日志中 - 这使我们相信客户端在发送在规定的时间内请求。

非常欢迎任何关于如何捕获/调试这种情况的想法!

【问题讨论】:

标签: asp.net httpexception request-timed-out


【解决方案1】:

您是否尝试过通过 telnet 手动发布,但根本没有完成 POST。我很想看看你是否可以复制你所看到的行为。鉴于该站点的性质,如果您故意收到一些格式错误的 POST 来尝试破解系统,我不会感到惊讶。

我注意到有时我需要重新启动 Safari 才能在某些操作挂起后让 SO 再次工作,但我认为这是我的问题。

【讨论】:

  • 我无法重现该行为 - 长时间运行的请求只是 504'ed。但这很好,因为我们知道它(可能)不是客户端问题,因为甚至没有到达 ASP.NET 管道。
【解决方案2】:

我们过去经常在流量非常大的网络客户端中看到这些——想知道这是否相关。据说发生的事情是 HttpWebRequest(我假设您在使用 HttpWebResponse 时遇到问题?也许他们也有同样的问题)在幕后使用了一些 janky 线程池,即使您的请求是同步的。有时某些东西会死锁,因为堆栈中更高的一些其他 .NET 对象正在使用相同的系统线程池,一个会饿死另一个,最终导致超时。我认为这个问题在这里描述得更好:http://www.deez.info/sengelha/2005/03/03/beware-threadpools-and-httpwebrequest/

【讨论】:

  • 那里有非常激烈的文章 - 这意味着该问题已在 2.0 中修复。将对此进行更多研究,看看是否如此。
【解决方案3】:

如果您运行的是 IIS 7,则可以使用 Failed Request Tracing。我实际上并没有将它用于超时,我主要将其设置为仅捕获特定的 http 错误代码。但我知道你可以让它转储任何花费超过 X 时间的请求的痕迹。

【讨论】:

  • 是的,我们打算在今晚重新开启它 - 谢谢你的提醒 :)
  • 我们还将在受影响的 url 的代码路径中添加一些跟踪语句 - 希望这将有助于发现问题。
【解决方案4】:

我还会扫描您日志中的 IP 地址,看看是否是同一个人反复出现问题。您知道,可能有些人仍在使用拨号帐户,或者他们的终端可能存在其他网络问题。但是,当然,不要在没有尽可能多的调查的情况下就把它写下来。

【讨论】:

    【解决方案5】:

    从 IIS6 切换到 IIS7 后,我们的网络服务器遇到了同样的“请求超时”问题。我相信这个问题是特定于 IIS7 的。我的猜测是,在将请求移交给 ASP.Net 进行处理之前,这些错误在 IIS6 的处理链中被进一步吞没或忽略了。我今天打开失败的请求跟踪,看看我是否可以捕获有关该问题的更多信息。到目前为止,您对客户端原因的解释似乎是最有效的。

    【讨论】:

      【解决方案6】:

      我在使用小型 AJAX 网络服务的生产服务器上遇到了同样的问题。在我们的防火墙外进行数据包捕获后,我们发现服务的 POST 来自两个 TCP 段,而第二个段从未到达我们。 (第一个数据包只包含标头,第二个丢失的数据包应该是 json 正文)所以基本上 IIS 只是坐在那里等待其余的 POST。在配置的超时之后,服务器向客户端发送一个 RST 数据包并记录“请求超时”错误 - 这是正确的行为。

      我们正在尝试让客户端重现,但运气不佳,但在我们的案例中,这似乎完全与网络相关(或者可能是一些不喜欢帖子内容的“安全”软件)。

      【讨论】:

      • 这实际上是我们能够确定的全部 - 完整的请求不会发送到服务器。这很麻烦,因为您想为每个请求提供服务,尤其是用于投票和提问/回答问题的 POST!
      • 看起来很多未完成的请求来自“垃圾邮件”来源。
      • 你有没有为这个问题想出一个解决方案,或者你只是忽略了它们?我从合法请求(不是垃圾邮件)中得到了很多。
      • 这是一个可接受的答案吗?它确实说明了问题所在……但这只是问题的一半。什么是可能的解决方案?
      • 这里也一样,我遇到了同样的问题。这个问题有解决办法吗?
      【解决方案7】:

      【讨论】:

      • DebugDiag,不是 windbg。
      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      相关资源
      最近更新 更多