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 vs Event

編輯:Linux 教學

核心架構差異

特性Prefork (預派生多進程)Worker (多進程+多線程)Event (事件驅動線程)
處理單元單進程單線程多進程,每進程多線程多進程,每進程多線程(主線程只負責分發)
連接模型一進程一連接一線程一連接一線程處理多連接(Keep-Alive 由專用線程管理)
記憶體佔用高(進程隔離,各自複製地址空間)中(線程共享進程內存)低(線程複用,非阻塞 I/O)
穩定性極高(進程崩潰不影響其他)良好(線程崩潰可能拖垮進程)良好(同 Worker)
適用場景非線程安全模組(如舊版 PHP mod_php)、需絕對隔離高併發靜態/動態混合、線程安全應用極高併發、長連接(WebSocket、Comet)、現代 Web
預設狀態Apache 2.4 前預設2.4 起常見預設2.4 推薦用於生產

Prefork 關鍵參數解析

StartServers        5          # 啟動時預創建子進程數
MinSpareServers     5          # 最小空閒進程數
MaxSpareServers    10          # 最大空閒進程數(超過則 kill)
MaxRequestWorkers  256         # 最大同時客戶端連接數(即最大子進程數)
MaxConnectionsPerChild 0       # 子進程處理請求上限(0=無限,建議設 10000 防記憶體洩漏)

擴容邏輯:空閒不足時按指數級擴容(1→2→4→8…最多 32/秒),直到滿足 MinSpareServers。

Worker/Event 關鍵參數

StartServers         3
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestWorkers  400        # 總線程上限 = ServerLimit * ThreadsPerChild
ServerLimit         16        # 最大進程數上限(需配合 MaxRequestWorkers 調整)

父進程動態調整子進程數,使總空閒線程數維持在 MinSpareThreads~MaxSpareThreads 區間。

選型決策樹

  1. 需載入非線程安全模組(如 mod_php)? → Prefork
  2. 否,追求極致高併發、長連接? → Event(Apache 2.4+)
  3. 否,一般高併發、線程安全應用? → Worker

遷移注意事項

  • 切換 MPM 需重新編譯或安裝對應套件(如 apache2-mpm-event)。
  • PHP 需改用 php-fpm (FastCGI) 而非 mod_php。
  • 第三方模組需確認線程安全性。
  • 調整 ServerLimit、ThreadLimit 等硬性上限參數時需重啟 Apache。

總結

Prefork 以進程隔離換取最高穩定性,適合傳統應用;Worker/Event 以線程共享提升吞吐,Event 更針對 Keep-Alive 優化。現代 Web 應用建議採用 Event + php-fpm 架構,兼顧效能與穩定。

Copyright © Windows教程網 All Rights Reserved