• 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再讲内容返回给用户。

  • 相关阅读:
    HBase目录
    HBase介绍及简易安装(转)
    Hadoop目录
    通过java读取HDFS的数据 (转)
    Flume-NG一些注意事项(转)
    spark读取 kafka nginx网站日志消息 并写入HDFS中(转)
    Java开发牛人十大必备网站
    HTTP协议状态码详解(HTTP Status Code)(转)
    Flume NG 配置详解(转)
    Android笔记(五)利用Intent启动活动
  • 原文地址:https://www.cnblogs.com/kevin-yang123/p/14179343.html
Copyright © 2020-2023  润新知