文章目錄
一台伺服器能撐起多少併發,不在於它有多少核,而在於每個進程到底吃掉了多少記憶體。
這句話聽起來像是挑釁,但卻是運維圈裡最真實的血淚經驗。
為什麼記憶體才是關鍵瓶頸
很多人看到8 核心CPU、24GB 記憶體的VPS,就下意識覺得可以隨便開幾百個PHP-FPM 進程。
然而,實際情況往往是:單一PHP 進程的RSS 記憶體佔用高達200MB。
這是透過命令列實測得出的結果:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
在HestiaCP的複雜框架、多重插件環境下,尤其是沒有最佳化OPcache 的情況下,200MB 是常態。
這意味著,記憶體才是決定最大並發的硬限制,而不是CPU。

推薦設定檔(php-fpm.conf)
pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s
參數計算邏輯與設定依據
| 配置參數 | 設定值 | 核心計算與設定依據 |
|---|---|---|
| pm | dynamic | 動態模式,根據並發需求彈性增刪進程,兼顧響應速度與記憶體利用率。 |
| pm.max_children | 80 | 24GB 總內存扣除系統核心及 MySQL的/Redis的/Nginx 後,留給PHP 約16GB。16,384 MB / 200 MB ≈ 81.9,設為80 可徹底杜絕高並發時的OOM。 |
| pm.start_servers | 16 | 啟動時預熱,設定為CPU 核心數的2 倍(8 核心× 2 = 16),確保服務重啟後能瞬間應對基礎並發。 |
| pm.min_spare_servers | 8 | 設定為CPU 核心數(8 核心),確保低流量階段隨時回應新請求。 |
| pm.max_spare_servers | 24 | 設定為CPU 核心數的3 倍(8 核心× 3 = 24),流量退去後保留適度進程,應對平緩波動。 |
| pm.最大請求數 | 500 | 單一進程達到200MB 基數較大,調低至500 次請求即銷毀重建,能更快清理隱式記憶體洩漏。 |
| pm.process_idle_timeout | 10s | 超出 min_spare_servers 的空閒進程在10 秒無請求後主動釋放,歸還系統記憶體。 |
必備配套設定與調優建議
1. 超時防掛死機制
request_terminate_timeout = 60s 是關鍵。
它能強制終止因資料庫死鎖或第三方API 阻塞導致的卡死進程。
同時,Nginx 的 fastcgi_read_timeout 必須保持在60s 以上,否則客戶端會提前收到 504 Gateway Timeout。
2. 突破記憶體瓶頸的策略
80 個最大並發程序意味著在極端並發下系統最多同時處理80 個動態HTTP 請求。
如果想繼續提升承載力,重點應放在降低單進程記憶體。
- 開啟OPcache:在
php.ini中配置opcache.enable=1及opcache.memory_consumption=256,字節碼快取能讓單進程記憶體從200MB 壓降至60~100MB。 - 合理控制memory_limit:將
php.ini中性的memory_limit限制在128M或256M,防止個別異常腳本無限吞噬記憶體。
一旦單進程記憶體降至100MB,pm.max_children 就能安全提升至 150 以上,並發能力幾乎翻倍。
權威觀點引用
根據Nginx 官方文件的建議:
“FastCGI applications should always be monitored with timeout directives to prevent resource exhaustion.”
(資料來源:Nginx Docs)
而PHP 官方手冊明確指出:
“pm.max_children defines the maximum number of child processes to be created. This is the most important directive.”
(資料來源:PHP-FPM Documentation
這些權威觀點與我們的實踐完全吻合,證明調優邏輯不僅是經驗,更是標準化的最佳實踐。
結語:我的觀點與金句
在高並發場景下,CPU 是發動機,記憶體是油箱,PHP-FPM 就是車隊調度。
引擎再強,油箱不夠大,車隊也跑不遠。
真正的高手,不是盲目把參數拉滿,而是精確計算每個行程的記憶體佔用,做到既不浪費,也不溢出。
調優的本質,是在有限資源裡找到最適平衡。
這不僅是技術,更是一種哲學。
所以,別再迷信“核數決定一切”,真正決定並發極限的,是你對內存的掌控力。
行動吧,把你的VPS 調優到極致,讓每一滴記憶體都物盡其用。
希望陳溈亮部落格(https://www.chenweiliang.com/) 分享的《8核心24G VPS爆內存? HestiaCP下PHP-FPM進程池極致調優實戰》,對您有幫助。
