page contents

PHP-FPM进程模型

本文将介绍以下内容: PHP-FPM进程管理方式介绍 PHP-FPM如何与Nginx等Web服务器进行通信

attachments-2020-09-dxyPjNAH5f4f06f72505d.png

本文将介绍以下内容:

  • 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进程:处理业务逻辑

v2-00917a467e71913eeb32fc844e92a757_720w.jpg


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

v2-0a895628216e5666216ebd3edc14c45d_720w.jpg

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


attachments-2020-09-ZSpPB1nt5f4f06e645ea2.jpg

  • 发表于 2020-09-02 10:44
  • 阅读 ( 692 )
  • 分类:操作系统

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章