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

Apache MPM 常見指令

可用語言:  de  |  en  |  fr  |  ja  |  tr 

說明由多個多處理模組 (MPM) 執行的指令集合
狀態MPM
Support Apache!

指令

錯誤修正清單

另請參閱

top

CoreDumpDirectory 指令

說明Apache HTTP Server 在傾印核心之前嘗試切換到的目錄
語法CoreDumpDirectory directory
預設值查看用法取得預設設定
內容伺服器設定
狀態MPM
模組event, worker, prefork

在傾印核心之前,這控制著 Apache httpd 嘗試切換到的目錄。如果你的作業系統設定為在崩潰程序的工作目錄中建立核心檔案,則 CoreDumpDirectory 是必要的,以便變更工作目錄從預設的 ServerRoot 目錄,這不應該是伺服器執行時用戶所寫入的。

如果你想要一個核心傾印用於偵錯,你可以使用這個指令把它放在一個不同的位置。如果你的作業系統沒有設定在崩潰程序的工作目錄中寫入核心檔案,則這個指令沒有效用。

Linux 系統的安全注意事項

在 Linux 中使用這個指令可能會允許系統上的其他程序 (如果執行具有相似的特權,例如 CGI 程式碼) 經由 `ptrace` 系統呼叫附加到 httpd 子行程。這可能會削弱對某些安全攻擊的防護。不建議在生產系統中使用這個指令。

Linux 上的核心傾印

如果 Apache httpd 以 root 身分啟動,並切換到另一個使用者,則 Linux 核心會停用核心傾印,即使該目錄對該程序具有寫入權限。Apache httpd (2.0.46 和更新版本) 在 Linux 2.4 以上版本中重新啟用核心傾印,但前提是你明確設定了 CoreDumpDirectory

BSD 上的核心傾印

若要啟用 BSD 系統 (例如 FreeBSD) 中 suid 可執行檔的核心傾印,將 `kern.sugid_coredump` 設為 1。

特定的訊號

CoreDumpDirectory 處理僅會針對一組特定致命信號發生:SIGFPE、SIGILL、SIGABORT、SIGSEGV 和 SIGBUS。

在某些作業系統中,SIGQUIT 也會導致核心傾印,但不會經過 CoreDumpDirectoryEnableExceptionHook 處理,因此核心位置完全由作業系統決定。

top

EnableExceptionHook 指令

說明啟用一個掛勾,在崩潰後執行異常處理常式
語法EnableExceptionHook 開啟|關閉
預設值EnableExceptionHook 關閉
內容伺服器設定
狀態MPM
模組event, worker, prefork

出於安全的理由,此指令僅在伺服器使用 `--enable-exception-hook` 選項設定時才可用。它會啟用一個掛勾,允許外部模組插入,並在子行程崩潰後執行某些操作。

已經有兩個模組使用這個掛勾:mod_whatkilledusmod_backtrace。請參閱 Jeff Trawick 的 EnableExceptionHook 網站 以進一步了解這些模組。

top

GracefulShutdownTimeout 指令

說明指定一個時間限制,在時間限制後,正常關閉的伺服器將會退出。
語法GracefulShutdownTimeout 秒數
預設值GracefulShutdownTimeout 0
內容伺服器設定
狀態MPM
模組event, worker, prefork
相容性可在 2.2 版本和後續版本中使用

GracefulShutdownTimeout 指示伺服器在收到「正常終止」信號後,應繼續執行多少秒以處理現有的連線。

將此數值設定為零表示伺服器將無限期地等待,直到所有剩餘的要求已完全服務為止。

top

傾聽 指令

說明伺服器傾聽的 IP 位址和連接埠
語法Listen [IP-address:]portnumber [protocol]
內容伺服器設定
狀態MPM
模組eventworkerpreforkmpm_winntmpm_netwarempmt_os2
相容性在 2.1.5 中加入了 protocol 參數。

Listen 指令指示 Apache httpd 僅傾聽特定的 IP 位址或連接埠;它預設會對所有 IP 介面上的要求做出回應。Listen 現在是必要的指令。如果它不在設定檔中,伺服器將無法啟動。這是 Apache httpd 之前版本中的變更。

Listen 指令告訴伺服器在指定的連接埠或位址與連接埠組合上接受傳入的要求。如果只指定連接埠號碼,伺服器會在所有介面上傾聽給定的連接埠。如果同時給出 IP 位址和連接埠,伺服器會在給定的連接埠和介面上傾聽。

可以透過多個 Listen 指令來指定多個要傾聽的位址和連接埠。伺服器將對列出的任何位址和連接埠中的要求做出回應。

例如,如要讓伺服器在連接埠 80 和連接埠 8000 上接受連線,請使用

Listen 80
Listen 8000

如要讓伺服器在兩個指定的介面和連接埠號碼上接受連線,請使用

Listen 192.170.2.1:80
Listen 192.170.2.5:8000

IPv6 位址必須以方括號括起來,如同以下範例所示:

Listen [2001:db8::a00:20ff:fea7:ccea]:80

對於大多數組態,選擇性的 protocol 參數都不是必要的。如果未指定,連接埠 443 的預設值是 https,所有其他連接埠的預設值是 http。這個協定用於決定哪個模組應處理要求,以及使用 AcceptFilter 指令套用協定特定的最佳化。

只需在非標準連接埠上執行時才需要設定協定。例如,在連接埠 8443 上執行 https 網站

Listen 192.170.2.1:8443 https

錯誤狀況

針對同一個 IP 位址和連接埠有多個 Listen 指令將導致 Address already in use 錯誤訊息。

另請參閱

top

ListenBackLog 指令

說明處理連線佇列的最大長度
語法ListenBackLog 後援
預設值ListenBackLog 511
內容伺服器設定
狀態MPM
模組eventworkerpreforkmpm_winntmpm_netwarempmt_os2

處理連線佇列的最大長度。通常不需要或不希望調整;但是,在某些系統上,在面對 TCP SYN 洪水攻擊時,需要增加這個值。請參閱 listen(2) 系統呼叫的 backlog 參數。

這個值通常會受到作業系統的限制,以較小的數字呈現。這會因作業系統的不同而異。此外,請注意許多作業系統不會使用設定為後援的確切值,而是使用一個基於後援(但通常大於後援)的數字。

top

ListenCoresBucketsRatio 指令

說明CPU 核心數量(線上)與監聽器儲存區數量的比值
語法ListenCoresBucketsRatio 比率
預設值ListenCoresBucketsRatio 0(停用)
內容伺服器設定
狀態MPM
模組event, worker, prefork
相容性可在 Apache HTTP 伺服器 2.4.17 中使用,且支援 socket 選項 SO_REUSEPORT 的核心,並使用此選項在監聽程序(或執行緒)的 socket 上平均分派新的連線(例如 Linux 3.9 和更新版本,但不包含 *BSD 中 SO_REUSEPORT 的現行實作。

可以使用(線上)CPU 核心數量與監聽器儲存區數量的 比率,讓 Apache HTTP 伺服器建立 num_cpu_cores / ratio 的監聽儲存區,每個儲存區包含其自己在相同埠上的 Listen-ing socket(數個),然後讓每個子處理單一儲存區(在建立子項目的時間點以循環分配儲存區)。

「線上」CPU 核心的含義

如果已設定 熱插拔, 則可在 Linux(以及 BSD)上啟用/停用 CPU 核心;因此,ListenCoresBucketsRatio在計算要建立的儲存區數量時,需要考慮這個參數。

ListenCoresBucketsRatio在接受新的連線時,如果/已成為瓶頸,則可以提升擴充性。在具有大量 CPU 核心的系統上,啟用這個功能已經過測試,顯示出顯著的效能提升和更短的回應時間。

CPU 核心的數量必須至少為設定的 比率 的兩倍,這個功能才能啟用。建議的 比率8,因此,當使用這個值時,執行時期必須至少有 16 個核心可用。針對每個目標系統,都需要計算出獲得最佳效能的正確 比率,測試多個值並觀察關鍵效能指標的變化。

此指令會影響 MinSpareThreadsMaxSpareThreads下界值的計算。要最佳化接受連線,子處理程序的數量必須是儲存區數量的倍數。

在相同 IP 位址和埠上的多個 Listener 或 Apache HTTP 伺服器

設定聆聽 Socket 上的 SO_REUSEPORT 選項,隨後允許多個處理程序(共用相同的 EUID,例如 root)繫結到相同的 IP 位址和埠,而不發生系統在一般情況下引發的繫結錯誤。

這也表示,在同一個 IP:port 上設定且 ListenCoresBucketsRatio 為正數的 Apache httpd 多個執行個體也會在沒有錯誤的情況下啟動,然後讓進入連線平均分配給兩個執行個體執行(這絕不屬於推薦或任何情況下合理的用法,只是一則這會防止偵測到類似可能的議題的通知)。

在同一個執行個體中,Apache httpd 會檢查並在完全相同的 IP(或主機名稱)和埠上設定多個 Listen 指令時失敗開始執行,因而避免產生會造成效能低落且無用的部分重複儲存區。但它無法(也絕對不會)盡力蒐集所有可能的重複情況(例如主機名稱解析成其他地方使用的 IP)。

top

MaxConnectionsPerChild 指令

說明限制個別子伺服器將在其執行期間處理的連線數目
語法MaxConnectionsPerChild 數字
預設值MaxConnectionsPerChild 0
內容伺服器設定
狀態MPM
模組eventworkerpreforkmpm_winntmpm_netwarempmt_os2
相容性適用於 Apache HTTP Server 2.3.9 和之後版本。舊名稱 MaxRequestsPerChild 仍受支援。

MaxConnectionsPerChild 指令會設定個別子伺服器處理程序處理的連線數目限制。MaxConnectionsPerChild 連線數之後,子處理程序就會中止。如果 MaxConnectionsPerChild0,則處理程序就不會過期。

MaxConnectionsPerChild 設定為非零值會限制處理程序可能透過(意外的)記憶體洩漏消耗的記憶體量。

top

MaxMemFree 指令

說明主要配置器允許保留而不呼叫 free() 的最大記憶體容量
語法MaxMemFree KBytes
預設值MaxMemFree 2048
內容伺服器設定
狀態MPM
模組eventworkerpreforkmpm_winntmpm_netware

MaxMemFree 指令會設定每個配置器允許保留而不呼叫 free() 的最大可用 Kbytes 數。在執行緒 MPM 中,每個執行緒有其自己的配置器。設定為零時,會將此閾值設定為無限。

top

MaxRequestWorkers 指令

說明同時處理連線的最大數目
語法MaxRequestWorkers 數字
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組event, worker, prefork

指令 MaxRequestWorkers 設定可同時處理之要求數量限制。高過 MaxRequestWorkers 限制的任何連線嘗試將會排隊,其數量基礎為指令 ListenBacklog 所定義。當處理其他要求後釋放子程序時,連線將會獲得處理。

對於非執行緒伺服器(也就是 prefork),MaxRequestWorkers 轉換成將啟動以處理要求的子程序之最大數量。預設值為 256;若要增加它,亦必須提高 ServerLimit

對於執行緒與混合式伺服器(例如 eventworker),MaxRequestWorkers 限制可供提供給客戶端服務之執行緒總數。對於混合 MPM,預設值為 16(ServerLimit)乘以 25(ThreadsPerChild)的值。因此,若要增加 MaxRequestWorkers 至需要超過 16 個程序的數值,亦必須提高 ServerLimit

MaxRequestWorkers 在 2.3.13 版之前稱為 MaxClients。舊名稱仍受支援。

top

MaxSpareThreads 指令

說明閒置執行緒之最大數量
語法MaxSpareThreads number
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組event, worker, mpm_netware, mpmt_os2

閒置執行緒之最大數量。不同的 MPM 對此指令的處理方式不同。

對於 workerevent,預設值為 MaxSpareThreads 250。這些 MPM 以伺服器層級處理閒置執行緒。如果伺服器中的閒置執行緒過多,則子程序會被終止,直到閒置執行緒數量低於該數值為止。如果啟用 ListenCoresBucketsRatio,可能會建立額外的程序/執行緒。

對於 mpm_netware,預設值為 MaxSpareThreads 100。由於此 MPM 執行單一程序,因此備用執行緒數量也是伺服器層級的。

mpmt_os2 的運作方式類似於 mpm_netware。對於 mpmt_os2,預設值為 10

限制

指令 MaxSpareThreads 值的範圍有限。Apache httpd 會根據以下規則自動修正所提供的值

另請參閱

top

MinSpareThreads 指令

說明空閒執行緒的最小數量可處理請求高峰
語法MinSpareThreads 數字
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組event, worker, mpm_netware, mpmt_os2

處理請求高峰的空閒執行緒的最小數量。不同的 MPM 處理此指令的方式不同。

workerevent 的預設是 MinSpareThreads 75,而且以伺服器為基礎處理空閒執行緒。如果伺服器沒有足夠的空閒執行緒,則會建立子程序,直到空閒執行緒的數量大於 數字。如果啓用 ListenCoresBucketsRatio,系統可能建立其他程序/執行緒。

mpm_netware 的預設是 MinSpareThreads 10,而且由於它是單獨程序的 MPM,系統以伺服器為基礎追蹤這一點。

mpmt_os2 的運作方式類似於 mpm_netware。對於 mpmt_os2,預設值是 5

另請參閱

top

PidFile 指令

說明伺服器記錄守護程序處理序 ID 的檔案
語法PidFile 檔案名稱
預設值PidFile logs/httpd.pid
內容伺服器設定
狀態MPM
模組event, worker, prefork, mpm_winnt, mpmt_os2

PidFile 指令設定伺服器記錄守護程序處理序 ID 的檔案。如果檔案名稱不是絕對路徑,則假設它相對於 ServerRoot

範例

PidFile /var/run/apache.pid

通常可以向伺服器傳送訊號很方便,讓它關閉,然後重新開啟其 ErrorLogTransferLog,然後重新讀取其設定檔。這樣做是藉由傳送 SIGHUP 訊號 (kill -1) 到 PidFile 中列出的處理序 ID。

PidFile 會受到關於日誌檔案儲存位置和 安全性 的相同警告規範。

注意事項

從 Apache HTTP Server 2 開始,我們建議你只使用 apachectl 腳本,或作業系統提供的 init 腳本,來 (重新) 啟動或停止伺服器。

top

ReceiveBufferSize指令

說明TCP接收緩衝區大小
語法ReceiveBufferSize 位元組
預設值ReceiveBufferSize 0
內容伺服器設定
狀態MPM
模組eventworkerpreforkmpm_winntmpm_netwarempmt_os2

伺服器將設定TCP接收緩衝區大小為指定的位元組數目。

如果設定為0,伺服器將使用作業系統預設值。

top

ScoreBoardFile指令

說明用於儲存子程序協調資料的檔案位置
語法ScoreBoardFile 檔案路徑
預設值ScoreBoardFile 日誌/apache_runtime_status
內容伺服器設定
狀態MPM
模組事件工作者前置 forkmpm_winnt

Apache HTTP伺服器使用記分板在主程序和子程序之間進行通訊。有些架構需要一個檔案來簡化此通訊。如果未指定檔案,Apache httpd首先嘗試完全在記憶體中(使用匿名共用記憶體)建立記分板,然後會嘗試在磁碟上建立檔案(使用基於檔案的共用記憶體)。指定此指令會導致Apache httpd始終在磁碟上建立檔案。

範例

ScoreBoardFile /var/run/apache_runtime_status

基於檔案的共用記憶體對於需要直接存取記分板的第三方應用程式很有用。

如果您使用ScoreBoardFile,那麼將其放在RAM磁碟上可能會提高速度。但是請小心,您必須注意日誌檔放置及安全性的相同警告事項。

另請參閱

top

SendBufferSize指令

說明TCP緩衝區大小
語法SendBufferSize 位元組
預設值SendBufferSize 0
內容伺服器設定
狀態MPM
模組eventworkerpreforkmpm_winntmpm_netwarempmt_os2

將伺服器的TCP傳送緩衝區大小設定為指定的位元組數目。通常會在高速、高延遲連線(100毫秒左右,例如洲際快速通道)上將其設定為作業系統標準預設值。

如果設定為0,伺服器將使用作業系統提供的預設值。

可能需要進一步設定作業系統,才能在高速、高延遲連線中獲得更好的效能。

在某些作業系統上,EnableSendfile未設定為關閉,則可能看不到因較大的SendBufferSize所導致的TCP行為變更。此互動作用僅適用於靜態檔案。

top

ServerLimit指令

說明可設定程序數量的上限
語法ServerLimit 數目
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組event, worker, prefork

對於 prefork MPM,此指令設定 Apache httpd 程序生命期中 MaxRequestWorkers 的最大設定值。對於 workerevent MPM,此指令與 ThreadLimit 結合使用時,會設定 Apache httpd 程序生命期中 MaxRequestWorkers 的最大設定值。對於 event MPM,此指令也定義了多少個舊的伺服器程序可以持續執行並完成正在進行的連線處理。重新啟動期間變更此指令的任何嘗試都會遭到忽略,但 MaxRequestWorkers 可以在重新啟動期間修改。

使用此指令時必須特別小心。如果將 ServerLimit 設定為遠高於必要的數值,會配置額外的未使用共享記憶體。如果將 ServerLimitMaxRequestWorkers 都設定為系統無法處理的數值,Apache httpd 可能無法啟動,或系統可能不穩定。

prefork MPM 中,僅當您需要將 MaxRequestWorkers 設定得比 256 (預設值) 還高時,才使用此指令。請勿將此指令的設定值設定得比您可能想要設定為 MaxRequestWorkers 的值高。

worker 中,僅當 MaxRequestWorkers ThreadsPerChild 設定需要多於 16 個伺服器程序 (預設值) 時,才使用此指令。請勿將此指令的設定值設定得比由您可能想要達到的 MaxRequestWorkers ThreadsPerChild 所需要的伺服器程序數目還高。

event 中,如果由 MaxRequestWorkersThreadsPerChild 設定所定義的程序數目,外加正常關閉的程序數目,比 16 個伺服器程序 (預設值) 還多時,請增加此指令。

注意事項

伺服器中編譯了 ServerLimit 20000 的硬限制 (對於 prefork MPM 為 200000)。這項限制的目的是要避免因為錯字而產生的不良影響。要進一步增加到超出此限制,您將需要修改 mpm 原始程式碼檔案中的 MAX_SERVER_LIMIT 值,並重建伺服器。

另請參閱

top

StartServers 指令

說明啟動時建立的子伺服器程序數量
語法StartServers 數字
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組event, worker, prefork, mpmt_os2

StartServers 指令設定在啟動時建立之之子伺服器處理序數量。由於處理序數量會依照負荷動態控制(請參閱 MinSpareThreadsMaxSpareThreadsMinSpareServersMaxSpareServers),通常幾乎沒有調整此參數的理由。

預設值因 MPM 而異。 workerevent 的預設值為 StartServers 3 prefork 的預設值為 5mpmt_os2 的預設值為 2

top

StartThreads 指令

說明啟動時建立的執行緒數量
語法StartThreads 數量
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組mpm_netware

啟動時建立的執行緒數量。由於執行緒數量會依照負荷動態控制(請參閱 MinSpareThreadsMaxSpareThreadsMinSpareServersMaxSpareServers),通常幾乎沒有調整此參數的理由。

mpm_netware 中,預設值為 StartThreads 50,而且由於只有一個處理序,因此這是啟動時建立的執行緒的總數量,用於處理要求。

top

ThreadLimit 指令

說明設定每個子處理序的執行緒可配置數量上限
語法ThreadLimit 數量
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組eventworkermpm_winnt

此指令設定 ThreadsPerChild 的最大設定值,適用於 Apache httpd 處理序的運行期間。重新啟動期間修改此指令的所有嘗試都會被略過,但可以在重新啟動期間修改 ThreadsPerChild,最多到此指令的值。

使用此指令時必須特別小心。如果 ThreadLimit 設定為遠大於 ThreadsPerChild 的值,將會配置多餘的未使用的共用記憶體。如果 ThreadLimitThreadsPerChild 都設定為高於系統可處理的值,Apache httpd 可能無法啟動,或是系統可能不穩定。將此指令的值設定為目前的 Apache httpd 執行對於 ThreadsPerChild 最高預測設定值,不要再高。

mpm_winnt 一起使用時,ThreadLimit 的預設值為 1920,與其他部分一起使用時,預設值則為 64

注意事項

伺服器已內建 ThreadLimit 20000 的嚴格限制 (或搭配 event 時為 ThreadLimit 100000、搭配 mpm_winnt 時為 ThreadLimit 15000) 。這旨在避免鍵入錯誤所造成的嚴重後果。若要進一步提高這個限制,您需要修改 mpm 來源檔案中的 `MAX_THREAD_LIMIT` 值,並重新建置伺服器。

top

ThreadsPerChild 指令

說明每個子程序建立的執行緒數目
語法ThreadsPerChild number
預設值請參閱用法以查看詳細資料
內容伺服器設定
狀態MPM
模組eventworkermpm_winnt

這個指令設定每個子程序建立的執行緒數目。子程序在啟動時建立這些執行緒,而且永遠不會建立更多執行緒。如果使用 MPM 例如 mpm_winnt,其中只有一個子程序,則這個數字應高於足夠處理伺服器整體負載的數字。如果使用 MPM 例如 worker,其中有多個子程序,則執行緒的總數量必須高於足夠處理伺服器一般負載的數量。

搭配 mpm_winnt 使用時,ThreadsPerChild 的預設值為 64;搭配其他時使用則為 25

ThreadsPerChild 的值不能超過 ThreadLimit 的值。如果設定的值較高,系統啟動時會自動降低值,並記錄警告。這兩個指令之間的關係在 ThreadLimit 解釋。

top

ThreadStackSize 指令

說明處理用戶端連線的執行緒使用的堆疊大小 (以位元組為單位)
語法ThreadStackSize size
預設值NetWare 上為 65536;其他作業系統有所不同
內容伺服器設定
狀態MPM
模組eventworkermpm_winntmpm_netwarempmt_os2
相容性在 Apache HTTP Server 2.1 和更新版本中提供

ThreadStackSize 指令設定處理用戶端連線並呼叫模組協助處理這些連線的執行緒 (針對自動資料) 的堆疊大小。在多數情況下,作業系統預設的堆疊大小是合理的,但有些情況下可能需要調整

建議不要減少 ThreadStackSize,除非需要每個子處理序中的高數量執行緒。在某些平台(包括 Linux)上,128000 的設定已經太低,且會造成某一些常見模組當機。

可用語言:  de  |  en  |  fr  |  ja  |  tr 

top

留言

注意
此處並非問答區。在此處發表的意見應著重於提出改善文件或伺服器的建議,且若已實作或被視為無效/離題,則可能會遭到我們的管理員移除。關於如何管理 Apache HTTP 伺服器的問題應導向我們的 IRC 頻道,#httpd,位於 Libera.chat,或傳送至我們的 郵件列表