PHP-FPM

1、FPM是什么?

FPM(FastCGI 进程管理器)是 PHP FastCGI 的主要实现,实现了许多对高负载网站有用的功能。FPM 管理多个 PHP 进程,并通过 FastCGI 协议与 Web 服务器通信,提供更好的性能和资源管理。一般 nginx 服务器使用FPM。

PHP-FPM使用了多进程模型来处理PHP请求。当Web服务器接收到一个PHP请求时,它将该请求转发给PHP-FPM进程管理器。PHP-FPM会根据配置文件中的参数来创建、管理和回收PHP解释器进程(也称为worker进程),并将请求分配给这些worker进程来处理。这种多进程模型使得PHP-FPM能够处理大量并发请求,并提高PHP应用程序的性能和稳定性。

2、一下是FPM的工作流程:

  1. Web服务器接收到一个包含PHP请求的HTTP请求。
  2. Web服务器将该请求转发给PHP-FPM进程管理器。
  3. PHP-FPM进程管理器接收到请求后,从空闲进程池中选择一个worker进程来处理该请求。如果没有空闲进程,则根据配置文件中的参数决定是否要创建新的worker进程。
  4. 选定的worker进程接收到请求后,会解析PHP代码并执行相应的操作。它可以连接数据库、进行文件读写、生成HTML等。
  5. worker进程将处理结果返回给PHP-FPM进程管理器。
  6. PHP-FPM进程管理器将处理结果返回给Web服务器。
  7. Web服务器将最终结果返回给客户端。

在整个工作流程中,PHP-FPM进程管理器负责管理worker进程的生命周期。它会监控进程的状态,并根据需要创建或回收worker进程,以确保有足够的进程来处理请求并避免资源浪费。

此外,PHP-FPM还提供了一些额外的功能,如进程池分配、连接池管理、动态进程调整等,以优化PHP应用程序的性能和可靠性。

3、进程管理相关配置

pm string

设置进程管理器如何管理子进程。可用值:staticondemanddynamic。必须设置。

static - 子进程的数量是固定的(pm.max_children)。

ondemand - 进程在有需求时才产生(当请求时才启动。与 dynamic 相反,在服务启动时 pm.start_servers 就启动了。

dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers

pm.max_children int

pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。

该选项设置可以同时提供服务的请求数限制。类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量。

pm.start_servers in

设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。

pm.min_spare_servers int

设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_spare_servers int

设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_spawn_rate int

同时生成子进程的速率。仅当 pm 设置为 dynamic 时使用。默认值: 32

pm.process_idle_timeout mixed

秒数,多久之后结束空闲进程。 仅当设置 pmondemand。 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:10s。

pm.max_requests int

设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 '0' 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。

pm.status_listen string

接受 FastCGI 状态请求的地址。会创建一个新不可见池用来独立处理请求。如果主池处理长时间运行的请求时很繁忙, 那么对长时间运行的请求结束之前能够获得 FPM 状态页面会非常有用。语法与 listen 指令相同。默认值:none。

pm.status_path string

查看 FPM 状态页面的 URI。此值必须以斜线(/)开头。如果没有设置,则无法访问状态页面,默认值:无。

相关推荐
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
Chinese Red Guest3 小时前
python
开发语言·python·pygame