我們的伺服器有時會拒絕提供簡單的 HTML 頁面。
這種情況發生在請求數量相對較多的情況下。不過,處理器負載並不重,並且有大量空閒記憶體。該錯誤似乎平均在 50 個請求中出現 1 個,具體取決於伺服器負載。
我需要找到問題的根源並採取適當的行動來消除它。
我懷疑問題根源是大量傳入的網路封包。平均每秒有 5000 個資料包。流量 - 2 MBits/sec 這可能是錯誤的原因嗎?
有一件有趣的事情,如果伺服器無法回應,Apache 不會將請求字串記錄到 access.log 中。
此錯誤可在多台客戶端電腦上重複出現。不涉及DNS,因為我是透過IP存取伺服器的。
我已經使用 tcpdump 實用程式分析了問題案例。這些是 tcpdump 追蹤的好會話和壞會話。兩個實驗中的要求是相同的。好 - 伺服器回傳回應。不好 - 無回應,超時錯誤。
---- 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
--------
主辦單位:SuperbHosting
作業系統:Ubuntu
伺服器參數:E6300 CONROE 1.86GHZ 2 X 1MB CACHE 1066 1GB DDR2 667MHZ
這是我們使用的 apache 設定檔的鏈接http://repkin5.snow.prohosting.com/apache.txt
這是逾時錯誤後立即取得的伺服器狀態報告。http://repkin5.snow.prohosting.com/server-status.htm120 個子伺服器中只有 10 個正在運行,因此有足夠的空間用於新請求。
虛擬機器統計
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 8900 725900 8468 65684 0 0 5 18 11 33 4 3 92 1
答案1
- 有一件有趣的事情,如果伺服器無法回應,Apache 不會將請求字串記錄到 access.log 中。
這聽起來像是網路問題。伺服器應該記錄它收到的任何請求,即使它由於某種原因無法回應。您可能想要驗證網路伺服器上沒有看到資料包遺失。
答案2
您有可能處於 TCP 連線的可用核心緩衝區較低的情況。我希望從中進行一些日誌記錄(登錄到伺服器,測試直到“無回應”,然後運行dmesg
並查看是否有任何內容適用)。
若要調整網路設置,這可能是個起點。
正如 Chris Nava 所說,確保網路中不存在封包遺失可能是值得的,因此請務必開始使用 ping 進行檢查(唉,回應 ping 與處理 TCP 封包完全不同) )。