<-
Apache > HTTP Server > 文件 > 2.4 版

多處理器模組 (MPMs)

可用語言:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

本文件描述多處理器模組為為何物,以及 Apache HTTP Server 如何使用它們。

Support Apache!

另請參閱

top

前言

Apache HTTP Server 的設計宗旨為功能強大且靈活的網頁伺服器,能夠在各種不同環境的眾多平台上運作。不同的平台和環境往往需要不同的功能,或者可能有最有效率的不同實作方式。Apache httpd 一向透過其模組化設計,來適應各種環境。此種設計讓網頁管理員能藉由在編譯時或在執行時選擇載入哪些模組的方式,來決定哪些功能要納入伺服器中。

Apache HTTP Server 2.0 將此模組化設計延伸到網頁伺服器的最基本功能。伺服器附帶有多個多處理器模組 (MPM),它們負責在機器上繫結到網路埠,接受要求並分派子行程來處理要求。

將模組化設計延伸到這個伺服器層級,具有兩個重要的優點

在使用者層級,MPM 看起來很像其他 Apache httpd 模組。主要差異是 MPM 每次只能載入伺服器一個。可用 MPM 的清單顯示在 模組索引網頁 上。

top

MPM 預設值

下表列出各種作業系統的預設 MPM。如果您在編譯時沒有做出其他選擇,這將是選取的 MPM。

Netwarempm_netware
OS/2mpmt_os2
Unixpreforkworkerevent,取決於平台功能
Windowsmpm_winnt

在此,「Unix」用於表示類 Unix 作業系統,例如 Linux、BSD、Solaris、Mac OS X 等。

對於 Unix,安裝哪個 MPM 的決定取決於兩個問題

1. 系統是否支援線程?

2. 系統是否支援執行緒安全輪詢(特別是 kqueue 和 epoll 函數)?

如果兩個問題的答案為「是」,預設的 MPM 是 event

如果 #1 的答案為「是」,但 #2 的答案為「否」,預設值將是 worker

如果兩個問題的答案都是「否」,則預設的 MPM 將是 prefork

實際上,這表示預設值幾乎總是會是 event,因為所有現代作業系統都支援這兩個功能。

top

建立 MPM 作為靜態模組

MPM 可以建立為所有平台的靜態模組。在建立期間選擇一個 MPM 並連結至伺服器中。為了變更 MPM,必須重新建立伺服器。

要覆寫預設 MPM 選項,請使用 configure 腳本的 --with-mpm=NAME 選項。NAME 是所需 MPM 的名稱。

編譯完伺服器後,可以使用 ./httpd -l 來確定選取哪個 MPM。此命令將列出已編譯到伺服器中的每個模組,包括 MPM。

top

建立 MPM 作為 DSO 模組

在 Unix 及類似平台上,MPM 可以作為 DSO 模組建構,並以與其他 DSO 模組相同的方式動態載入到伺服器。將 MPM 建構為 DSO 模組,可透過更新 MPM 的 LoadModule 指令,而不是重新建構伺服器,來變更 MPM。

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

嘗試 LoadModule 多個 MPM 會導致開機失敗,並出現下列錯誤。

AH00534: httpd: 設定錯誤:已載入多個 MPM。

此功能使用 configure 腳本的 --enable-mpms-shared 選項啟用。輸入引數 all 時,將安裝平台的所有可能 MPM。或者,可以將 MPM 清單指定為引數。

預設的 MPM,會自動選取或使用 configure 腳本的 --with-mpm 選項指定,將載入到已產生的伺服器組態檔。編輯 LoadModule 指令,選取不同的 MPM。

可用語言:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

top

評論

注意
這裡不是問與答區。放在這裡的意見應著重於改善文件或伺服器的建議,如果已實作或被認為無效/與主題無關,我們的管理員可能會將其移除。關於 Apcahe HTTP Server 管理方式的問題,應導向到我們在 Libera.chat 上的 IRC 頻道 #httpd,或寄送至我們的 郵件列表