Apache-2.2

試圖降低 apache 2 程序的數量

  • March 22, 2011

我在 Debian 6 LAMP 上使用 apache mpm_prefork

我有

Timeout 20
KeepAlive On
MaxKeepAliveRequests 80
KeepAliveTimeout 2

<IfModule mpm_prefork_module>
   StartServers          5
   MinSpareServers       5
   MaxSpareServers      10
   ServerLimit      500
   MaxClients            500
   MaxRequestsPerChild   1500
</IfModule>

配備 4GB 記憶體。問題是 Apache2 啟動了太多程序。每當我這樣做時,top我看到大部分時間只有 1 個執行,而 apache2 程序睡眠的數量隨著時間的推移而增長(現在有 437 個程序並且還在增加)

我可以知道為什麼 apache2 會啟動新程序而不是使用已經打開的程序嗎?我怎麼能告訴apache不要打開這麼多程序?

謝謝

您告訴 Apache,您希望能夠同時為 500 個客戶端提供服務,並對客戶端程序池設置 500 個硬性限制。

當 Apache 收到請求時,它將開始擴展其程序池,直到接近您的限制。

因為您使用的是預分叉伺服器,所以每個程序只處理一個請求執行緒,因此 Apache 需要維護大量的休眠程序才能處理您指定的並發客戶端數量。這些會佔用大量記憶體。

您可以切換到執行緒 MPM 模型、降低 MaxClients 的值或增加 RAM 量。參見http://httpd.apache.org/docs/2.0/mod/prefork.html>和<http://httpd.apache.org/docs/2.0/mod/mpm_common.html

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