php-fpm子进程数控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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子进程数控制的主要内容,如果未能解决你的问题,请参考以下文章

php-fpm进程管理

PHP-FPM子进程过少解决办法

php-fpm 进程数的设定

php-fpm优化

phpfpm配置 php中的坑

php-fpm三种对子进程的管理方式