Apache2 的 MPM 設定有 prefork、worker 的模式,現在新版還有 event 模式,此篇的參數雖然寫 prefork,不過 worker 的設定值也大同小異~
註:此篇只看 prefork
Apache2 prefork 幾個參數設定 說明
Apache 的 MPM 設定檔
- /etc/apache2/mods-available/mpm_prefork.conf
- /etc/apache2/mods-available/mpm_worker.conf
- /etc/apache2/mods-available/mpm_event.conf
- 實際打開看,會發現設定檔都差不多,worker 主要是多 Thread 的設定
先只看 prefork 的設定(取自 設定檔 的說明):
- 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
- MaxRequestWorkers: maximum number of server processes allowed to start
- MaxConnectionsPerChild: maximum number of requests a server process serves
由上述說明和一般設定的值看都蠻容易懂的,只是會發現 MaxConnectionsPerChild 一直都是設定為 0,這個參數到底設定有什麼意義呢?
此篇有將設定做些白話的整理:有關 Apache HTTP Server 系統限制與設定的討論,下述整理自此篇:
<IfModule prefork.c> StartServers 5 # apache 啟動執行時的 process 數,也就是可同時處理的 request 數 MinSpareServers 5 MaxSpareServers 10 ServerLimit 150 # ServerLimit 的設定值 應「大於等於」下面的 MaxClients MaxClients 150 # 官方的定義就是「最大可同時處理的 connection 數」 MaxRequestsPerChild 10000 # 一個「Apache sever」在處理該數目後,會自動中止並重啟,以防 memory leakage </IfModule>
MaxRequestsPerChild 上述的說明的『一個「Apache sever」』應該要說是 「一個 Apache process」。
因為 Apache prefork、worker 等等,啟動後都會啟動不少 Process,依照上述設定,最少會啟動 5個程序(process)。
而這些 Process 一直長期跑下來,難免會遇到 Memory leak 或者某些沒處理好的情況,此參數就是設定 Process 服務到某個數量後,就將此 Process 重啟(不是整個 Apache 重啟),畢竟,重 開治百病.. XD