2009-01-14 68 views
25

在StackOverflow中,我們每天都會看到一些「請求超時」異常。診斷「請求超時」HttpExceptions

事實:

  • 請求超時默認90秒
  • 只對員額
  • 數據發佈時發生的文字,通常是小(< 1KB),但能到幾KB
  • 沒有形成數據在服務器變量捕獲
  • 客戶端的UA是多種多樣的:IE5.5 - 7,火狐3.0.5,iPhone,鉻
  • 客戶位置多樣化:英國,法國,美國 - 北卡羅來納州,俄亥俄州,內華達州,

我們測試了基於服務器的超時時間(即,使用Thread.Sleep)和所有表單變量在異常日誌中被正確捕獲 - 這導致我們認爲客戶端在分配的時間內發送請求時出現問題。

任何想法如何陷阱/調試這種情況是非常受歡迎的!

+4

這個確切的問題對於我們,當我們從IIS6切換到IIS7.5集成模式。我們的調查結果可在這裏:http://stackoverflow.com/questions/4929115/any-progress-on-diagnosing-request-timed-out-httpexceptions/7276249#7276249。 – 2011-09-01 20:45:30

回答

3

你有沒有嘗試過通過telnet手動發佈,而沒有完成POST。我很想看看你是否可以複製你所看到的行爲。考慮到該網站的性質,如果您有意識地嘗試和破解系統,我不會感到驚訝。

我注意到有時我需要重新啓動Safari以便在某些操作掛起後再次運行,但我認爲這是我的問題。

+0

今晚我會做這個 - 謝謝你的建議! – 2009-01-14 04:00:47

+0

我無法重現這種行爲 - 長時間運行的請求只是504'ed。但這很好,因爲我們知道它可能不是客戶端問題,因爲甚至沒有達到ASP.NET管道。 – 2009-01-14 06:06:53

2

我們以前用我們的流量非常高的網絡客戶端看到了很多 - 不知道它是否相關。假設發生的事情是HttpWebRequest(我假設你有問題的HttpWebResponse?也許他們有相同的問題)使用一些jugy線程池底下,即使當你的請求是同步的時候偶爾會發生死鎖,因爲堆棧中較高的其他.NET對象使用相同的系統線程池,並且一個會讓另一個死掉,最終導致超時。我認爲這裏的問題更好描述如下:http://www.deez.info/sengelha/2005/03/03/beware-threadpools-and-httpwebrequest/

+0

那裏非常激烈的文章 - 它意味着問題被修復爲2.0。將研究更多,看看是否如此。 – 2009-01-14 05:21:35

9

如果您正在運行IIS 7,則可以使用Failed Request Tracing。我實際上並沒有用它來超時,我主要是設置它來捕獲特定的http錯誤代碼。但我知道你可以得到它來拋棄任何請求超過X的時間的痕跡。

+0

是的,我們要打開這個今晚回來 - 謝謝你的提醒:) – 2009-01-14 05:13:31

+0

我們也將一些跟蹤語句添加到受影響的網址的代碼路徑 - 希望這將在發現問題幫助。 – 2009-01-14 06:10:43

1

我也會掃描日誌中的IP地址,看看它是不是重複發生問題的人。您知道,有些人可能仍在使用撥號帳戶,或者可能存在其他網絡問題。但是,當然,不要在沒有儘可能多地調查的情況下寫下來。

0

從IIS6切換到IIS7後,我們遇到了與我們的網絡服務器相同的「請求超時」問題。我相信這個問題是IIS7特有的。我的猜測是這些錯誤在IIS6的處理鏈中被吞噬或被忽略,然後請求被交給ASP.Net進行處理。我今天打開了「失敗的請求追蹤」,看看我是否可以捕獲關於此問題的更多信息。到目前爲止,您對客戶端原因的解釋似乎是最有效的。

12

我有在使用一個小的AJAX web服務我們的生產服務器同樣的問題。在我們的防火牆之外進行數據包捕獲之後,我們發現服務的POST來自兩個TCP段,而第二段並沒有到達我們。 (第一個數據包只包含頭文件,第二個數據包應該是json體)所以基本上IIS只是坐在那裏等待POST的其餘部分。配置的超時後,服務器向客戶端發送一個RST數據包並記錄「Request timed out」錯誤 - 這是正確的行爲。

我們正努力讓客戶攝製沒有多少運氣,但是對我們來說,這似乎完全網絡相關的(也可能是一些「安全」,不喜歡的帖子的內容,軟件)。