phpphpfpm
1. FPM看这一篇就够了
Fpm是PHP FastCGI运行模式的进程管理器,其主要功能在于管理PHP处理请求的进程,以优化服务器性能。FastCGI协议作为Web服务器(如Nginx、Apache)和处理程序(如PHP)之间的通信协议,用于在应用层实现两者间的交互。当PHP处理完请求后,通过FastCGI协议将解析结果返回给Web服务器,最终由Web服务器将内容发送给用户。
Fpm采用多进程模型,由master进程和多个worker进程组成。master进程启动后创建socket,但不直接处理请求,而是由fork出的worker进程处理请求。master进程负责fork和杀掉worker进程,以动态管理进程数量。在master进程fork出worker后,会循环事件列表,worker进程则不断接受请求,解析FastCGI协议数据,执行PHP脚本,并关闭请求。整个worker处理请求的过程包括等待请求、解析请求、请求初始化、执行PHP脚本和关闭请求等步骤。
在处理请求时,worker进程会记录其当前所处的阶段,如等待请求阶段、读取fastcgi请求header阶段、获取请求信息阶段、执行PHP脚本阶段和请求处理完成阶段,以方便管理进程状态。
master进程主要负责进程管理。它在启动后不再返回,进入事件循环,处理IO及定时器事件,以动态控制worker的数量。master进程会根据配置文件中的pm参数,选择静态模式、动态模式或按需模式来管理worker进程。静态模式下,master在启动时根据配置参数fork出固定数量的worker进程。动态模式下,master根据配置参数初始化一定数量的worker进程,并在请求增多时增加worker进程,减少时减少worker进程。按需模式下,master不预先分配worker进程,而是等到有请求时才通知master进程fork worker进程,处理完成后worker进程不会立即退出,当空闲时间超过配置参数后才退出。
除了进程管理,master还处理信号事件、进程检查定时器和执行超时检查定时器。信号事件允许master响应系统信号,如SIGINT、SIGTERM、SIGQUIT等,以便在接收到退出信号时通知所有worker退出,并确保master正常退出。进程检查定时器用于定期检查worker进程数量,动态调整进程数量以优化资源使用。执行超时检查定时器用于监控worker处理请求的时间,如果请求处理时间超过设定的阈值,master将向worker进程发送kill -TERM信号以终止进程。
综上所述,Fpm作为PHP FastCGI运行模式的进程管理器,通过多进程模型和动态管理策略,优化了PHP处理请求的性能,提高了服务器响应速度和资源利用率。