首先,我們關注下 PHP-FPM 的運作方式:
static :表示在 `php-fpm` 运行时直接 `fork` 出 `pm.max_chindren` 个子进程, dynamic:表示,运行时 `fork` 出 `start_servers` 个进程,随着负载的情况,动态的调整,最多不超过 `max_children` 个进程。
一般推薦用 static。
優點是不用動態的判斷負載情況,提升效能;
缺點是多佔用些系統記憶體資源。
PHP-FPM 子行程數量,是不是越多越好?
當然不是,pm.max_chindren,進程多了,增加進程管理的開銷以及上下文切換的開銷。更核心的是,能並發執行的 php-fpm 進程不會超過 cpu 個數。
如何設置,取決於你的程式碼
如果程式碼是 CPU 計算密集型的,pm.max_chindren 不能超過 CPU 的核心數。如果不是,那麼將 pm.max_chindren 的值大於 CPU 的核心數,是非常明智的。
公式:
在 N 20% 和 M / m 之間。
參數說明:
N 是 CPU 核心數。
M 是 PHP 能利用的記憶體數。
m 是每個 PHP 進程平均使用的記憶體數。
適用於 dynamic 方式。
static方式:M / (m * 1.2)
當然,還有一種保險的方式,來設定 max_children。適用於 static 方式。
1、先把 max_childnren 設定成一個比較大的值。
2、穩定運行一段時間後,觀察 php-fpm 的 status 裡的 max active processes 是多少
3、然後把 max_children 配置比它大一些就可以了。
pm.max_requests
:指的是每個子程序在處理了多少個請求數量之後就重新啟動。這個參數,理論上可以隨便設置,但是為了預防記憶體洩漏的風險,還是設定一個合理的數比較好。
推薦影片教學:PHP影片教學
#以上是php一般開多少個行程的詳細內容。更多資訊請關注PHP中文網其他相關文章!