PHP-FPM进程模型解析

本文将介绍以下内容:

  • 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通信的呢?

当用户请求一个http地址时,Nginx会收到请求,然后将请求转发给PHP-FPM,PHP-FPM收到请求后会将请求转发给一个空闲的Worker进程。当Worker进程处理完后会将结果返回给Nginx,Ngixn再讲内容返回给用户。

posted on 2020-12-23 16:24  kevin_yang123  阅读(280)  评论(0编辑  收藏  举报