php-fpm的简单介绍

PHP-FPM(PHP FastCGI Process Manager)即PHP FastCGI 进程管理器。

那么什么是FastCGI呢?

1.CGI(Common Gateway Interface)

首先介绍下CGI(Common Gateway Interface)的概念,即通用网关接口,是外部扩展应用程序与 Web 服务器交互的一个标准接口规范。

服务器端与客户端进行交互的常见方式多,CGI 技术就是其中之一。根据CGI标准,编写外部扩展应用程序,可以对客户端浏览器输入的数据进行处理,完成客户端与服务器的交互操作。CGI规范定义了Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。对于许多静态的HTML网页无法实现的功能,通过 CGI可以实现,比如表单的处理、对数据库的访问、搜索引擎、基于Web的数据库访问等等。

使用CGI实现客户端与服务器的交互有以下几个标准步骤,具体步骤如下:

(1)Web 客户端的浏览器将URL的第一部分解码与Web服务器相连。

(2)Web 浏览器将URL的其余部分提供给服务器。

(3)Web 服务器将URL转换成路径和文件名。

(4)Web 服务器发送 HTML 和别的组成请求页面的文件给客户。一旦页面内容传送完,

这个连接自动断开。

(5)在客户端,HTML脚本提示用户做动作或输入。当用户响应后,客户请求Web服务器建立一个新的连接。

(6)Web 服务器把这些信息和别的进程变量传送给由HTML以URL的形式指定CGI程序。

(7)CGI 根据输入作出响应,把响应结果传送给 Web 服务器。

(8)Web 服务器把响应的数据传给客户,完成后关闭连接。

2.早期web通信

早期的web通信只是按照客户端请求将保存在web服务器硬盘中的数据转发过去而已,这种情况下客户端每次获取的信息也是相同的内容(即静态请求,比如图片、样式文件、HTML文档),而随着web的发展,web所能呈现的内容更加丰富,与用户的交互日益频繁,比如博客、论坛、电商网站、社交网络等。

这个时候仅仅通过静态资源已经无法满足web通信的需求,所以引入CGI以便客户端请求能够触发web服务器运行另一个外部程序,客户端所输入的数据也会传给这个外部程序,该程序运行结束后会将生成的HTML和其他数据通过web服务器再返回给客户端(即动态请求,比如基于PHP、Python、Java实现的应用)。利用CGI可以针对用户请求动态返回给客户端各种各样的动态变化的信息。

3.FastCGI

顾名思义,是CGI的升级版本,为了提升CGI的性能而生。

CGI针对每个HTTP请求都会fork一个新进程来进行处理(解析配置文件、初始化执行环境、处理请求),然后把这个进程处理完的结果通过web服务器转发给用户,刚刚fork的新进程也随之退出,如果下次用户再请求动态资源,那么web服务器又再次fork一个新进程,如此周而复始循环往复。

而FastCGI则会先fork一个master主进程,解析配置文件、初始化执行环境,然后再fork多个worker进程(与Nginx有点像),当HTTP请求过来是,master进程将其会传递给一个worker进程,然后立即可以接收下一个请求,这样就避免了重复的初始化操作,效率自然也就提高了。而且当worker进程不够用时,master进程还可以根据配置预先启动几个worker进程等着;当空闲worker太多,也会关掉一些,这样不仅提高了性能,还节约了系统资源。

4.PHP-FPM

FastCGI只是一个协议规范,需要每个语言具体去实现,PHP-FPM就是PHP版本的FastCGI协议实现。有了它,就是实现PHP脚本与web服务器(通常是Nginx)之间的通信,同时它也是一个PHP SAPI(Server Application Programming Interface 服务器端应用编程接口,PHP 内核提供给外部调用其服务的接口,即外部系统可以通过 SAPI 来调用 PHP 提供的编译脚本、执行脚本的服务),从而构建起PHP解释器与web服务器之间的桥梁。

PHP-FPM 负责管理一个进程池来处理来自web服务器的HTTP动态请求,再PHP-FPM中,master主进程负责与web服务器进行通信,接收HTTP请求,再将请求转发给worker进程进行处理,worker进程主要负责动态执行PHP代码,处理完成后,将处理结果返回给web服务器,再由web服务器将结果发送给客户端。这就是PHP-FPM的基本工作原理。

ps:最大请求数,最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。

这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露

pm.max_requests = 10240

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值