Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Apache MPM 選型指南:prefork vs worker 模式差異、切換步驟與參數調校

編輯:Linux 教學

核心架構差異

特性preforkworker
處理模型多進程、單執行緒多進程、多執行緒
連線對應一進程處理一連線一執行緒處理一連線
記憶體佔用較高較低
穩定性高(進程隔離)中(執行緒崩潰影響整進程)
相容性支援非執行緒安全模組需所有模組執行緒安全
效能單核略高高併發下優勢明顯

prefork 適用場景

  • 使用非執行緒安全的第三方模組(如舊版 PHP)。
  • 除錯困難平台,進程隔離易於核心傾印分析。
  • 追求最大穩定性、可接受較高記憶體。

worker 適用場景

  • 高流量站點,需以較少記憶體支援大量併發。
  • 所有載入模組確認執行緒安全。
  • 系統資源受限環境。

切換步驟(以原始碼安裝為例)

# 1. 備份原啟動檔
mv /usr/local/apache2/bin/httpd /usr/local/apache2/bin/httpd.prefork
# 2. 切換 worker 二進制檔
mv /usr/local/apache2/bin/httpd.worker /usr/local/apache2/bin/httpd
# 3. 調整 MPM 參數
vi /usr/local/apache2/conf/extra/httpd-mpm.conf
# 4. 重啟
/usr/local/apache2/bin/apachectl restart

httpd-mpm.conf 關鍵參數

prefork 區塊

<IfModule mpm_prefork_module>
ServerLimit      256
StartServers     5
MinSpareServers  5
MaxSpareServers  10
MaxClients       256
MaxRequestsPerChild 0
</IfModule>
  • ServerLimit:MaxClients 上限(預設 256,最大 20000,需置於最前)。
  • MaxClients:同步最大連線數(= 最大進程數)。
  • MaxRequestsPerChild:0=永不回收,非零可防記憶體洩漏並釋放閒置進程。

worker 區塊

<IfModule mpm_worker_module>
StartServers      2
MaxClients        150
MinSpareThreads   25
MaxSpareThreads   75
ThreadsPerChild   25
MaxRequestsPerChild 0
</IfModule>
  • MaxClients = ServerLimit × ThreadsPerChild(預設 16×25=400)。
  • MinSpareThreads/MaxSpareThreads:整體閒置執行緒池控制。
  • ThreadsPerChild:每進程固定執行緒數,啟動時一次建立。

Red Hat / CentOS 系統切換指令

cd /usr/sbin
mv httpd httpd.prefork
mv httpd.worker httpd
vi /etc/httpd/conf/httpd.conf   # 調整 <IfModule worker.c> 區塊
/etc/init.d/httpd restart

常見錯誤:Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe → 註解 /etc/httpd/conf.d/php.conf 中 LoadModule php5_module 行。

建議

生產環境**優先使用預設 prefork**,除非確認所有模組執行緒安全且記憶體極度受限。PHP 官方亦建議搭配 prefork。

Copyright © Windows教程網 All Rights Reserved