Implements a non-threaded, pre-forking web server
prefork模組是非執行緒、預先產生(pre-forking)行程(process)的方式去處理請求,類似Apache 1.3版的方式(尚未研究)。辨識名稱是mpm_prefork_module。
prefork模組適合用在下列兩種案例:
若使用非執行緒安全(non-thread-safe)的程式庫,為了避免執行緒的問題所以可以使用prefork模組。
最佳隔離每一個請求的方式,避免一個請求的問題而影響其他請求的處理
prefork模組的運作是自我調整,幾乎不需要去設定組態參數。唯一需要調整的參數是MaxClients,MaxClients是允許最大同時間處理請求的設定,換句話說也就是子行程的最大數量,MaxClients的限制在於實體主機的記憶體容量。
prefork模組運作方式是在一個父行程下,產生多個子行程。子行程是httpd啟動時由prefork模組預先建立,子行程的數量由設定參數決定,並依據子行程狀態自我動態調整。
以下列出prefork模組使用的設定參數與預設值,定義在server/mpm/prefork/mpm_default.h,注意這些預設值是寫在程式碼當中,編譯時就已經確定了。
StartServers = 5
MinSpareServers = 5
MaxSpareServers = 10
MaxClients = 256
ServerLimit = 200000
MaxRequestsPerChild = 10000
組態設定範例
# 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
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
細部運作流程:
[server/mpm/prefork/prefork.c]ap_mpm_run
[server/mpm/prefork/prefork.c]startup_children,依據組態設定呼叫make_child建立多個子行程。
[server/mpm/prefork/prefork.c]make_child,這裡就會fork()新的處理程序。
[server/mpm/prefork/prefork.c]child_main