Apache-2.2

記憶體內容導致大量 404 錯誤,連接過多

  • December 22, 2011

由於大量的流量,我的網站已經三天沒有響應了。

頁面上的 JavaScript 元素會定期從伺服器請求圖像,當人們打開瀏覽器視窗(因此從未停止請求圖像)時,連接數成為問題。

我重新設計了網站以使用單個精靈並且只載入一次;但是,由於人們仍在嘗試載入舊內容,因此出現了大量 404 錯誤。該站點位於 VPS 上,由於延遲而無法使用。

更糟糕的是,我最初認為延遲是由於缺乏記憶體造成的。我在 .htaccess 文件中添加了一條指令,供訪問者記憶體資源(包括舊的、低效的程式碼)。

我的主機一直無法解決問題。可以做些什麼來強制持久連接停止嘗試載入過時的內容?

您不能真正阻止某人向不存在的資源發出請求(例如,任何人都可以為不存在的頁面創建一個 URL 並獲得 404)。但是,您可以採取一些措施來改善這種情況。

首先,更改新內容的文件名 - 如果您仍然在 html 中引用 javascript 文件,請確保它的名稱與有問題的文件不同,這樣瀏覽器就不會使用記憶體的副本。

其次,讓你的 404 頁面盡可能簡單(絕對是靜態頁面,而不是動態頁面,而且非常小)。

第三,Apache 在沒有大量可用記憶體的情況下處理大量並發請求時效率不高(它為每個請求啟動一個工作執行緒)。考慮(至少暫時)在 Apache 前面添加另一個伺服器,以更有效地處理 404 請求。一些範例可能包括:

  • nginx - 讓它為 404 請求(可能還有所有靜態文件)提供服務,並將其他請求傳遞回 Apache(它還可以記憶體代理請求)
  • Varnish - 它可以記憶體 404 請求並直接從記憶體中提供服務,從而減少 Apache 的負載

我會立即創建一個零字節文件以擺脫 404 並最小化每次檢索的成本。

引用自:https://serverfault.com/questions/343337