php-fpm三种进程管理方式
PHP-FPM(FastCGI Process Manager)提供了三种进程管理方式,具体使用哪种模式可在配置文件(如php-fpm.conf)中通过pm参数指定(例如pm = dynamic)。以下是三种模式的详细说明:
一、静态模式(static)
核心特点:worker 进程数量固定不变,是最简单的进程管理模式。
- 运行机制:PHP-FPM 启动时,master进程会根据pm.max_children的配置,一次性创建对应数量的worker进程;后续运行中,worker进程数不会增减,始终保持初始数量。
- 关键配置:仅需设置pm.max_children(固定的worker进程总数)。
- 适用场景:适合请求量稳定、资源配置固定的环境(如流量波动小的业务),避免动态创建 / 销毁进程的开销。
二、动态模式(dynamic)
核心特点:worker进程数量随请求量动态调整,是最常用的模式。
- 运行机制:
- 启动阶段:master进程根据pm.start_servers的配置,初始化一批worker进程;
- 运行阶段:master进程会根据空闲worker数量自动调整:
- 若空闲worker数低于pm.min_spare_servers(表示请求较多、worker不足),则新建worker进程,直到总数达到pm.max_children;
- 若空闲worker数高于pm.max_spare_servers(表示worker闲置过多),则销毁部分worker进程,避免资源浪费。
- 关键配置(4 个核心参数):
- pm.start_servers:初始worker进程数;
- pm.min_spare_servers:最小空闲worker进程数(低于此值时新建);
- pm.max_spare_servers:最大空闲worker进程数(高于此值时销毁);
- pm.max_children:worker进程总数上限(不可突破)。
- 适用场景:适合请求量波动较大的环境(如日常流量和高峰流量差异明显的业务),既能应对高峰请求,又能在低峰时节省资源。
三、按需模式(ondemand)
核心特点:按需创建worker进程,无请求时不占用进程资源,类似传统 CGI 的运行方式。
- 运行机制:
- 启动阶段:master进程启动时不创建任何worker进程;
- 有请求时:master进程收到请求后,动态创建worker进程处理请求,总数不超过pm.max_children;
- 请求处理后:worker进程不会立即退出,若空闲时间超过pm.process_idle_timeout(进程空闲超时时间),则自动销毁。
- 关键配置:
- pm.max_children:worker进程总数上限;
- pm.process_idle_timeout:worker进程空闲超时时间(超时后销毁)。
- 适用场景:适合请求量极少、资源极度受限的环境(如低频访问的内部工具),避免进程长期闲置占用资源。
总结
三种模式的核心差异在于worker进程的创建时机和数量控制逻辑:
- 静态模式:固定数量,启动即创建,适合稳定流量;
- 动态模式:动态调整数量,兼顾性能与资源,适合波动流量;
- 按需模式:按需创建,无请求时无进程占用,适合低频访问场景。
实际配置时需根据业务流量特征、服务器资源(CPU、内存)合理选择,并优化对应参数。