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子進程數控制