本文将介绍以下内容:
PHP-FPM进程管理方式介绍PHP-FPM如何与Nginx等Web服务器进行通信
先说一下PHP-FPM的进程模型,PHP-FPM采用的是Master/Worker进程模型。当PHP-FPM启动时,会读取配置文件,然后创建一个Master进程和若干个Worker进程(具体是几个Worker进程是由php-fpm.conf中配置的个数决定)。Worker进程是由Master进程fork出来的。
Master进程和Worker进程的作用:
Master进程:负责管理Worker进程、监听端口Worker进程:处理业务逻辑
PHP-FPM进程管理方式有动态(Dynamic)、静态(Static)、按需(Ondemand)三种,下面将一一介绍。
动态(Dynamic)在这种方式下,PHP-FPM启动时会创建一定数量的Worker进程。当请求数逐渐增大时,会动态增加Worker进程的数量;当请求数降下来时,会销毁刚才动态创建出来的Worker进程。在这种方式下,如果配置的最大进程数过大,当请求量增加时会出现大量Worker进程,进程之间会频繁切换,浪费大量CPU资源。下面的三个参数可以配置Worker进程的数量:pm.start_servers:动态方式下的起始php-fpm进程数量。pm.min_spare_servers:动态方式下的最小php-fpm进程数量。pm.max_spare_servers:动态方式下的最大php-fpm进程数量。静态(Static)这种方式下,PHP-FPM启动时会创建配置文件中指定数量的Worker进程,不会根据请求数量的多少而增加减少。因为PHP-FPM开启的每个Worker进程同一时间只能处理一个请求,所以在这种方式下当请求增大的时候,将会出现等待的情形。下面的参数可以配置Worker进程的数量:pm.max_children:静态方式下开启的php-fpm进程数量。按需(Ondemand)在这种方式下,PHP-FPM启动时,不会创建Worker进程,当请求到达的时候Master进程才会fork出子进程。在这种模式下,如果请求量比较大,Master进程会非常繁忙,会占用大量CPU时间。所以这种模式不适合大流量的环境。在Nginx+PHP-FPM的架构中,Web服务器是如何与PHP-FPM通信的呢?
当用户请求一个