在StackOverflow上,我们每天都会看到一些“请求超时”异常。
事实:
我们在异常日志中测试了基于服务器的超时(即使用Thread.Sleep)和正确捕获的所有表单变量 - 这使我们相信客户端在发送问题时遇到问题请求在规定的时间内。
非常欢迎任何关于如何捕获/调试这种情况的想法!
答案 0 :(得分:12)
我在使用小型AJAX Web服务的生产服务器上遇到了同样的问题。在防火墙外部进行数据包捕获后,我们发现服务的POST来自两个TCP段,第二个段从未到达我们。 (第一个数据包只包含标题,第二个丢失的数据包应该是json主体)所以基本上IIS只是坐在那里等待POST的其余部分。配置超时后,服务器向客户端发送RST数据包并记录“请求超时”错误 - 这是正确的行为。
我们试图获得一个客户端repro没有太多运气,但在我们的情况下,这似乎是完全网络相关的(或可能是一些不喜欢帖子内容的“安全”软件)。
答案 1 :(得分:9)
如果您运行的是IIS 7,则可以使用Failed Request Tracing。我实际上并没有将它用于超时,我大多数时候已将其设置为仅捕获特定的http错误代码。但我知道你可以把它丢弃任何超过X时间的请求。
答案 2 :(得分:3)
您是否尝试通过telnet手动发布并且没有完成POST。我有兴趣看看你是否可以复制你所看到的行为。考虑到网站的性质,如果你故意试图破解系统,那么我会不会感到惊讶。
有时我注意到我需要重新启动Safari,以便在某些操作挂起后让SO再次工作,但我认为这是我的问题。
答案 3 :(得分:3)
本文介绍如何使用windbg来捕获它:
答案 4 :(得分:2)
我们曾经在我们非常高流量的网络客户端上看到了很多 - 想知道它是否相关。应该发生的是HttpWebRequest(我假设你遇到了HttpWebResponse的问题?也许他们有相同的问题)在封面下使用一些janky线程池,即使你的请求是同步的。每隔一段时间就会出现死锁,因为堆栈中较高的其他.NET对象使用相同的系统线程池,而另一个则会使另一个陷入困境,最终导致超时。我认为这里更好地描述了这个问题:http://www.deez.info/sengelha/2005/03/03/beware-threadpools-and-httpwebrequest/
答案 5 :(得分:1)
我还会扫描日志中的IP地址,看看是否有人反复出现问题。你知道,有些人可能仍在使用拨号帐户,或者他们可能还有其他网络问题。但是,当然,不要在没有尽可能多地调查的情况下将其写下来。
答案 6 :(得分:0)
从IIS6切换到IIS7后,我们遇到了与我们的网络服务器相同的“请求超时”问题。我相信这个问题是IIS7特有的。我的猜测是,在请求被移交给ASP.Net进行处理之前,这些错误在IIS6中的处理链中被进一步吞噬或忽略。我今天打开了失败的请求跟踪,看看我是否可以捕获有关该问题的更多信息。到目前为止,您对客户端原因的解释似乎最有效。