HTTP 請求偶爾無法到達伺服器。為什麼?

HTTP 請求偶爾無法到達伺服器。為什麼?

我們在專用伺服器上託管我們的網路服務。有時(我想說十分之二)沒有從伺服器收到回應。這會使瀏覽器因逾時錯誤而回退。

一個重要的細節:在這種情況下,Apache 不會記錄請求。伺服器未加載,還有大量可用記憶體和 CPU 電量。

我已經使用 tcpdump 實用程式分析了問題案例。這些是 tcpdump 追蹤的「好」和「壞」會話。兩個實驗中的要求是相同的。好 - 伺服器回傳回應。不好 - 無回應,超時錯誤。

從這些數據你明白為什麼會出現問題嗎?我怎樣才能進一步接近錯誤的根源?

我已將真實 IP 位址替換為 123.45.67.890

---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------

---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------

有關服務的詳細資訊。

這是天氣預報服務。它是用 Perl 編寫的,由 MySQL 支援。該腳本使用了多個模組(來自 CPAN 和我們自己的)。

程式碼比較簡單。該腳本從另一台伺服器下載天氣,轉換資料格式並傳回 XML 回應。天氣緩存在 MyISAM DB 中。還有一個世界位置資料庫(INNODB),也可以透過腳本請求。

託管:SuperbHosting 作業系統:Ubuntu

答案1

嘗試使用tcp轉儲或者線鯊來監控網路流量。這樣至少您會知道是否有網路問題。即檢查請求是否到達機器。

此外,預設情況下,大多數瀏覽器對一台相同伺服器的連線數量有限(2)。如果您的頁面有一些 javascript 物件「忘記」關閉連線等,則瀏覽器可能從未真正發送請求。

答案2

您可以僅使用 IP 位址嘗試您的請求嗎?如果是這樣,這可能有助於縮小問題範圍。

所有請求是否都來自同一位置,是否有問題?如果是這樣,請嘗試另一個位置,也許是星巴克的筆記型電腦或其他地方。如果它發生在多個位置,使用不同的瀏覽器,在一個非常簡單的頁面上,沒有 AJAX 或複雜的 Javascript,那麼這就是有價值的資訊。

如果使用 IP 位址工作可靠,則很可能是 DNS。了解正在使用的網域可能有助於縮小範圍。

答案3

我會選擇邁克爾·加夫(Michael Gaff),然後在託管公司上投入一些錢——這些類型的流量問題很容易因配線板故障、網卡、網卡驅動程序問題或不良佈線以及其他上千種基礎設施問題而發生。

我指望您從不同的位置嘗試過此操作(或從其他地方收到具有相同問題的報告)並且無論如何都遇到了相同的問題,因此我們可以排除您的問題,對嗎?

我是一個硬體狂,所以我傾向於將硬體故障視為奇怪的軟體和網路問題以及一般大規模破壞的原因。

答案4

問題是有大量開啟的 TCP 連接,新連線偶爾會因此被丟棄。

相關內容