Apache HTTP Server 第 2.4 版
說明 | 多處理模組,實作混合多執行緒多處理網頁伺服器 |
---|---|
狀態 | MPM |
模組識別碼 | mpm_worker_module |
來源檔案 | worker.c |
此多處理模組 (MPM) 實作混合多處理多執行緒伺服器。透過使用執行緒來提供要求,它能夠使用比以處理為基礎的伺服器更少的系統資源來提供大量要求。但是,它保持個別處理伺服器的大部分穩定性,每個伺服器都有多個可用的執行緒。
用於控制此 MPM 的最重要指令為 ThreadsPerChild
,它能控制每個子處理所配置的執行緒數量,以及 MaxRequestWorkers
,它能控制可能啟動執行緒的最大總數。
一個單一的控制程序(父程序)負責啟動子程序。每個子程序依據 每子程序執行緒數量
指令中指定的數量,建立固定數量的伺服器執行緒;同時還會有一個監聽器執行緒,偵聽連線並在連線到達時傳遞給伺服器執行緒進行處理。
Apache HTTP 伺服器總會嘗試維持一個備用或閒置伺服器執行緒池,隨時準備服務傳入要求。如此一來,客戶端就不必等到建立新的執行緒或程序後,才能傳遞要求進行服務。最初要啟動的程序數量是由 啟動伺服器數量
指令設定的。在運作期間,伺服器會評估所有程序中閒置執行緒的總數,並衍生或終止程序,以維持這個數量在由 最低備用執行緒數量
和 最高備用執行緒數量
設定的範圍內。因為這個程序具有高度自控性,因此鮮少需要修改這些指令的預設值。同時可服務的客戶端最大數量(亦即所有程序中執行緒總數的最大值)是由 最大要求工作執行緒數量
指令決定的。同時可用的最高子程序數量是由 最大要求工作執行緒數量
指令和 每子程序執行緒數量
指令相除決定的。
有兩個指令對同時可用的子程序數量和子程序中的伺服器執行緒數量設定嚴格限制,而且唯有在完全停止伺服器後再重新啟動才能變更。 伺服器限制
是同時可用的子程序數量限制,並且必須大於或等於 最大要求工作執行緒數量
指令和 每子程序執行緒數量
指令相除的結果。 執行緒限制
是伺服器執行緒數量限制,並且必須大於或等於 每子程序執行緒數量
指令。
除了目前進行中的子程序組之外,還可能會有其他即將終止的子程序組,但是至少有一個伺服器執行緒仍在處理既有的用戶端連線。可能最多有 MaxRequestWorkers
終止中的程序組,儘管實際數量預期會小很多。停用個別子程序組的終止,可以使用下列方式來避免這種情況
MaxConnectionsPerChild
的值設定為零 MaxSpareThreads
的值設定為與 MaxRequestWorkers
相同的值典型的 worker
MPM 流程執行緒控制組態如下
ServerLimit 16 StartServers 2 MaxRequestWorkers 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25
雖然主程序組在 Unix 中通常以 root
身分啟動,以便繫結至 80 埠,但子程序組和執行緒是由伺服器以權限較小的使用者身分啟動。 User
和 Group
指令用於設定 Apache HTTP Server 子程序組的權限。子程序組必須能夠讀取所有將提供的內容,但應該儘可能只具備極少的權限。此外,除非使用了 suexec
,這些指令也會設定 CGI 腳本將繼承的權限。
MaxConnectionsPerChild
控制伺服器透過終止舊程序組和啟動新程序組來回收程序組的頻率。
當遇到從眾效應問題(通常當有多個聆聽 socket 時)時,此 MPM 使用 mpm-accept
互斥鎖來對進來的連線進行序列化存取。此互斥鎖的執行面相可以使用 Mutex
指令進行組態。效能提示 文件中提供了關於此互斥鎖的更多資訊。