Apache-2.2

Apache 崩潰 VPS - 需要減少記憶體使用

  • February 11, 2010

我有一個執行使用 Apache 服務的 Web 應用程序的 VPS,平均每秒處理 20-50 個請求。通常超過這一點(每秒 50 個請求),Apache 使用的記憶體量對於 VPS 來說太高並且開始發生錯誤 - 網頁崩潰並且 VPS 在恢復正常水平之前下降一兩分鐘。

我相信 MaxClients 是減少 Apache 使用的 RAM 數量的最佳方法,我計劃將 MaxClients 從 256(預設值)減少到 100 左右。每個 Apache 程序使用 ~15MB 並且伺服器總共有 1900MB 記憶體 -該伺服器除了執行 Apache 和一些 cron 之外什麼都不做。

目前設置為:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

我嘗試減少 MaxClients 之前會導致嚴重緩慢,所以我還需要一些其他選項。

我將 MaxClients 減少到 ~100 的建議是否合理?如果伺服器再次遇到緩慢,我有什麼選擇 - 優化應用程序?減少記憶體使用的最佳方法是什麼 - 將圖像移動到另一個 Web 伺服器?

任何建議都感激不盡!

減少 apache 記憶體使用的最佳方法是從 mod_php 轉移到 fastcgi 之類的東西。由於 mod_php 成本(很可能),您的每個 apache 程序都是 15mb 或更多。將 php 請求傳遞給 fastcgi 會將平均 apache 程序大小減少到大約 1mb 左右,具體取決於 apache 配置。

由於 php 現在使用 fastcgi 集中,它的記憶體使用效率更高,系統使用的記憶體總量應該略有減少。

另一種方法是在 apache 前面放置一個記憶體效率更高的 http 伺服器,並讓它直接伺服器靜態內容並將非靜態請求代理到 apache。Nginx 非常適合這個。

作為臨時修復,您還可以考慮將 MaxRequestsPerChild 降低到 1000 或更激進的值。由於 apache 程序在處理請求時往往會變大,這將通過殺死它們並產生新程序來限制它們的大小。

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