1. 程式人生 > >php-fpm子進程數控制

php-fpm子進程數控制

php-fpm子進程

相關的參數:

pm = xxx: 如何控制子進程,選項有static和dynamic、ondemand(ondemand :啟動時不會創建子進程,當有新請求時會創建)。

pm.max_children = xxx:

當pm = static時,創建的php-fpm子進程數量;

當pm = dynamic或ondemand時,創建的php-fpm子進程的最大數量。

pm.start_servers = xxx: dynamic模式下,系統會在php-fpm開始運行的時候啟動“pm.start_servers”個php-fpm子進程。

pm.min_spare_servers = xxx: dynamic模式下,最小空閑進程的數量。如果空閑進程小於這個值,就會創建對應的進程。

pm.max_spare_servers = xxx: dynamic模式下,最大空閑進程的數量。如果空閑進程大於這個值,多余的空閑進程會被kill掉。

系統會根據需求動態的在“pm.min_spare_servers”和“pm.max_spare_servers”之間調整php-fpm進程數。


相關參數的取值:

通過ps命令查看每個php-fpm進程占用內存大小:運行一段時間後,每個進程占用的內存在20M-30M左右。

# ps -ylC php-fpm --sort:rss
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0 29355     1  0  80   0  4352 51301 ep_pol ?        00:15:03 php-fpm
S  2002 12865 29355  0  80   0 19296 54206 skb_re ?        00:58:51 php-fpm
S  2002 29365 29355  0  80   0 19780 54335 skb_re ?        05:44:56 php-fpm
S  2002 29359 29355  0  80   0 21280 54650 skb_re ?        05:44:51 php-fpm
S  2002 29357 29355  0  80   0 21676 55289 skb_re ?        05:44:18 php-fpm
S  2002 29358 29355  0  80   0 22716 55033 skb_re ?        05:43:25 php-fpm
S  2002 29362 29355  0  80   0 26576 56073 skb_re ?        05:43:56 php-fpm
S  2002 29360 29355  0  80   0 26864 56144 skb_re ?        05:44:18 php-fpm
S  2002 29361 29355  0  80   0 26888 56165 skb_re ?        05:43:32 php-fpm
S  2002 29356 29355  0  80   0 26896 56109 skb_re ?        05:44:23 php-fpm
S  2002 29370 29355  0  80   0 27196 56146 skb_re ?        05:43:10 php-fpm
S  2002 29371 29355  0  80   0 27240 56160 skb_re ?        05:44:10 php-fpm
S  2002 29363 29355  0  80   0 27460 56227 skb_re ?        05:44:30 php-fpm
S  2002 29373 29355  0  80   0 27636 56742 skb_re ?        05:43:27 php-fpm
S  2002 29366 29355  0  80   0 28436 56427 skb_re ?        05:42:49 php-fpm
S  2002 29374 29355  0  80   0 28636 56494 skb_re ?        05:44:40 php-fpm
S  2002 29368 29355  0  80   0 28844 56999 skb_re ?        05:44:05 php-fpm
S  2002 29375 29355  0  80   0 29972 56842 skb_re ?        05:43:18 php-fpm
S  2002 29367 29355  0  80   0 30048 56800 skb_re ?        05:43:31 php-fpm
S  2002 29364 29355  0  80   0 35872 58251 skb_re ?        05:44:25 php-fpm
S  2002 29372 29355  0  80   0 42840 60428 skb_re ?        05:44:19 php-fpm


pm該用哪個,根據服務器硬件配置來決定吧。進程的產生和銷毀都會帶來一定的資源開銷,所以考慮到穩定,選擇static比較合適。而選用dynamic則可以結束多余的進程,釋放內存。

pm.max_children值的設定,一般取"內存/20M"。這裏的內存是不包括其他進程占用的內存的。

pm.start_servers的值=min_spare_servers + (max_spare_servers - min_spare_servers) / 2

比如說512M的VPS,假如分配給php-fpm最大250M,建議pm.max_spare_servers設置為250/30 ,約為8。至於pm.min_spare_servers,則建議根據服務器的負載情況來設置,比如服務器上只是部署php環境的話,比較合適的值在2~5之間。

另外:pm.max_requests = 500,設置每個子進程重啟之前服務的請求數。對於可能存在內存泄漏的第三方模塊來說是非常有用的。如果設置為 '0' 則一直接受請求。


php-fpm子進程數控制