php-fpm的進程數可以根據設置分爲動態和靜態。
靜態:直接開啓指定數量的php-fpm進程,不再增加或者減少;
動態:開始的時候開啓一定數量php-fpm進程,當請求變大的時候,動態的增加php-fpm進程數到上限,當空閒的時候自動釋放空閒進程數到一個下限。
- 這兩種不同的執行方式,可以根據服務器實際需求來進行調整。
這裏先說一下涉及到這個的幾個參數,他們分別是 pmpm.max_children``pm.start_serverspm.min_spare_servers
和 pm.max_spare_servers
。
pm表示用哪種方式,有兩個值可以選擇,就是static靜態或者dynamic動態。在老一些的版本中,dynamic又被稱作apache-like。這個要注意看配置文件給出的說明了。
下面4個參數的意思分別爲:
pm.max_children
靜態方式下開啓的php-fpm進程數量;pm.start_servers
動態方式下的起始php-fpm進程數量;pm.min_spare_servers
動態方式下的最小php-fpm進程數量;pm.max_spare_servers
動態方式下的最大php-fpm進程數量。
- 如果將
dm
設置爲static
,那麼就只有pm.max_children
這個參數生效。系統會開啓設置的數量個php-fpm
進程。 - 如果將
dm
設置爲dynamic
,那麼pm.max_children
參數會失效,後面3個參數生效。系統會在php-fpm
運行開始的時候啓動pm.start_servers
個php-fpm
進程,然後根據系統需求動態在pm.min_spare_servers
和pm.max_spare_servers
之間調整php-fpm
進程數。 - 那麼,對於我們的服務器,選擇哪種執行方式比較好呢?事實和Apache一樣,我們運行的PHP程序在執行完成後,或多或少都會有內存泄露的問題。這也是爲什麼開始的時候一個php-fpm進程只佔用3M左右內存,運行一段時間後就會上升到20到30M的原因。所以,動態方式因爲會結束掉多餘進程,可以回收釋放一些內存,所以推薦在內存較少的服務器上使用。具體最大數量根據物理內存總大小除以20M得到。比如說512M的VPS,建議pm.max_spare_servers值設置爲20。而至於pm.min_spare_servers,則建議根據服務器的負載情況來設置,比較合適的值在5到10之間。
- 對比較大內存的服務器來說,設置爲靜態的話會提高效率。因爲頻繁開關php-fpm進程也會有時滯,所以內存夠大的情況下開靜態效果會更好。數量可以根據物理內存總大小除以30M得到。比如說2GB內存的服務器,可以設置爲50;4GB內存可以設置爲100等。