php-fpm入门指南

半兽人 发表于: 2020-03-02   最后更新时间: 2020-03-02 16:05:23  
{{totalSubscript}} 订阅, 1,584 游览

php-fpm

php-fpm是个中间件,在需要php解释器来处理php文本时会用到php-fpm。自php5.3.3以后就将php-fpm集成在php内核中。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。

相关概念

1、CGI

CGI(common gateway interface )通用网关接口,是webserver和web应用程序交流时的一组接口规范。

2、Fast-cgi

FastCGI可以理解为一种协议,用于web服务器(nginx,Apache)和处理程序间进行通信,是一种应用层通信协议。是cgi协议的升级版

fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新fork一个进程了,从而避免了每个请求进程创建和终止的开销,大大提高了效率。

3、Php-cgi

php-cgi是一个进程。php-cgi实现了cgi协议,但是它是单进程的,一个进程处理一个请求,处理结束后进程就自我销毁。

4、Php-fpm

是对php-cgi的改进版,它直接管理多个php-cgi进程/线程。也就是说,php-fpm是php-cgi的进程管理器,因此它算是fastcgi协议的实现。在一定程度上讲,php-fpm与php的关系,和tomcat对java的关系是类似的.

5、cgi进程/线程:

在php上,就是php-cgi进程/线程。专门用于接收web server的动态请求,调用并初始化zend虚拟机。

6、cgi脚本:

被执行的php源代码文件。

7、zend虚拟机:

对php文件做词法分析、语法分析、编译成opcode,并执行。最后关闭zend虚拟机。

8、cgi进程/线程和zend虚拟机的关系:

cgi进程调用并初始化zend虚拟机的各种环境。

9、cgi、fastcgi、php-cgi和php-fpm之间的关系

未出现php-fpm之前

web server对cgi进程/线程来说,它的作用就是发起动态处理请求,传递一些参数和环境变量,最后接收cgi的返回结果。通俗点说就是当接收到一个请求时,webserver临时启动一个cgi解释器,并通过cgi协议转发要运行的内容。当cgi脚本运行结束后,将结果返回给webserver,然后cgi解释器进程自我销毁。假如有10000个请求进来,那么就会先后启动10000个cgi解释器,这种方法效率极低。

php-fpm工作原理

php-fpm的管理对象是php-cgi进程

screenshot

1.master进程

php-fpm是一种多进程的模型,由一个master进程和若干worker进程组成(具体数量需要看php-fpm.conf的配置),master不会处理请求,而是fork出worker子进程去接受和处理请求

master进程的主要作用就是管理worker进程,负责fork或者kill掉子进程。在启动时根据配置文件会预先启动一定数量的php-fpm进程。当请求比较多worker处理不过来时,master会fork新的worker进程处理。如果空闲的进程较多时,就会kill掉一些worker进程,避免占用浪费系统资源。

2.worker进程

worker进程的主要工作是处理请求,每个worker进程都会accept请求,接受成功后会解析fastcgi,然后执行脚本,完成后关闭请求,继续等待新的连接。

更新于 2020-03-02

查看php-fpm更多相关的文章或提一个关于php-fpm的问题,也可以与我们一起分享文章