php5.4开始,php-fpm正式成为php进程管理工具,可以有效控制内存和进程、可以平滑重载PHP配置。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
配置说明
php-fpm配置文件
1.listen, 接收fastCGI请求的地址
2.pm参数,表示master进程控制子进程的工作模式
1.pm=static,始终保持固定数量的worker进程数,不会动态扩容。由pm.max_children决定。
2.pm=dynamic,表示动态调整子进程数量,但是至少会有1个子进程。具体策略如下:
- pm.max_children :同一时刻最大子进程数。
- pm.start_servers :启动时创建的子进程数。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2
- pm.min_spare_servers:空闲状态子进程数量最小值,如果空闲进程数量少于这个值,则会创建子进程。
- pm.max_spare_servers:空闲状态子进程数量最小值,如果空闲进程数量多于这个值,则会杀死子进程。
启动php-fpm时会根据pm.start_servers初始worker进程数,运行期间会动态调整数量,通过定时器,动态检查闲置worker数量,按一定策略调整worker数量,增加或减少。
优缺点
优点:动态扩容与缩容,不浪费系统资源
缺点:所有worker都在工作,新来的请求会有可能等待1秒,直到新创建的worker成功。
3.pm=ondemand,初始时不启动worker,只有请求来了才按需创建。pm.process_idle_timeout参数决定了,空闲超过该值的子进程将被kill掉,默认10秒。同一时刻进程数最多不超过pm.max_children。
优点:按需创建,不浪费资源
缺点:由于php-fpm是短连接,若每次请求都需要创建连接,频繁创建连接会影响并发性能。
默认是dynamic,在性能与资源上做一个平衡。
3.php_admin_value[memory_limit]
内存大小,默认32M。
master-worker
php-fpm的master进程只是负责监听管理worker进程,worker进程负责接收请求和处理。
worker进程挂掉时会给master进程发信号,master进程接收到信号后会新建一个worker继续处理。