| 屬性 | 說明 |
|---|---|
| 語法 | MaxRequestsPerChild number |
| 預設值 | MaxRequestsPerChild 0 (永不退出) |
| 作用域 | server config |
| 狀態 | core |
設定單個子進程處理請求數的上限。達到上限後,子進程優雅退出,由父進程重新衍生新子進程取代。
| 場景 | 建議值 | 理由 |
|---|---|---|
| 通用 PHP (mod_php) | 10000 - 50000 | 平衡效能與記憶體安全,PHP 請求級隔離天然抗洩漏 |
| mod_perl / 舊版模組 | 1000 - 5000 | 高洩漏風險,頻繁回收 |
| 純靜態/代理 | 0 或極大值 | 核心模組極穩定,無洩漏風險 |
| 屬性 | 說明 |
|---|---|
| 語法 | MaxSpareServers number |
| 預設值 | MaxSpareServers 10 |
| 作用域 | server config |
| 狀態 | core |
定義閒置子進程 (不處理請求) 的期望最大值。若閒置數 > 此值,父進程殺掉多餘進程。
MaxRequestsPerChild需配合 MinSpareServers、StartServers 共同構建「閒置池動態平衡」機制。
| 屬性 | 說明 |
|---|---|
| 語法 | MinSpareServers number |
| 預設值 | MinSpareServers 5 |
| 作用域 | server config |
| 狀態 | core |
定義閒置子進程 的期望最小值。若閒置數 < 此值,父進程以每秒最多 1 個 的速率衍生新子進程,直到達標。
StartServers 預熱配置範例 (中型流量 PHP 站點):
StartServers 10 # 啟動時預熱 10 個子進程
MinSpareServers 10 # 保證至少 10 個閒置,應對突發
MaxSpareServers 20 # 閒置上限 20,防止資源浪費
MaxRequestsPerChild 10000 # 每進程處理 1 萬請求後重生,防洩漏
ServerLimit 256 # 硬性上限 (需在 MaxClients 前設定)
MaxClients 200 # 最大並發子進程數 (同 MaxRequestWorkers)
apachectl -V | grep MPM → 必須為 prefork (本文指令僅適用 prefork)ab -n 10000 -c 100 https://site/ 觀察進程數、記憶體、回應時間MaxRequestsPerChild (防洩漏) → Min/MaxSpareServers (響應速度) → StartServers (啟動預熱) → MaxClients (並發上限)ps aux | grep httpd | wc -l (進程數)、free -h (記憶體)、mod_status (詳細狀態)Apache 2.4+ 推薦使用 Event MPM (單進程多執行緒 + 非阻塞 I/O) 配合 PHP-FPM。此架構下:
- Apache 僅處理靜態/代理/SSL 終結,進程數極少 (配置
ThreadsPerChild、AsyncRequestWorkerFactor)- PHP 運算完全移至獨立 PHP-FPM 池,由
pm.max_children、pm.start_servers、pm.max_requests控制,邏輯更清晰、擴展性更強若仍堅持 Prefork + mod_php,本文三指令為核心調優把手。