PHP-FPM 即 PHP FastCGI 进程管理器,要了解 PHP-FPM ,首先要看看 CGI 与 FastCGI 的关系。

CGI 的英文全名是 Common Gateway Interface,即通用网关接口,是 Web 服务器调用外部程序时所使用的一种服务端应用的规范。

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

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

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

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

这样一来,PHP-FPM 就好理解了,FastCGI 只是一个协议规范,需要每个语言具体去实现,PHP-FPM 就是 PHP 版本的 FastCGI 协议实现,有了它,就是实现 PHP 脚本与 Web 服务器(通常是 Nginx)之间的通信,同时它也是一个 PHP SAPI,从而构建起 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

PHP-FPM是什么?相关推荐

  1. Ubuntu 打 deb 包报错(fpm not found、dos2unix not found)

    1. 安装 dos2unix 在 Ubuntu 打 deb 包时有如下错误: /bin/sh: 1: dos2unix: not found 使用 apt-get 来安装 sudo apt-get i ...

  2. php-fpm开启报错-ERROR: An another FPM instance seems to already listen on /tmp/php-cgi.sock

    在升级了php7.2.0版本之后,重新启动php-fpm过程中遇到一个报错. An another FPM instance seems to already listen on /tmp/php-c ...

  3. Nginx与Lua利用fpm打成rpm包

    1.下载相关软件 需要软件有:Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安装文件 安装Lua或者LuaJIT都是可以的,但是出于效率的考虑,推荐安装LuaJITshell& ...

  4. php 脚本 fpm缓存,PHP生命周期及fpm(FastCGI进程管理器)的运作方式

    PHP在web方式中如何改了文件就立即生效的,重要的几个概念:sapi: 可以简单的理解为php引擎对外的一个统一接口,使得php可以和外部程序进行交互 php的生命周期中关键四个调用: MINT - ...

  5. 使用FPM快速生成RPM包

    为什么80%的码农都做不了架构师?>>>    许多朋友始终觉得RPM难做,主要是因为SPEC规则比较多,需要花精力去了解和熟悉.之前试用一个叫checkinstall的工具,可以自 ...

  6. Nginx 进阶 (ssl、fpm、rewrite、cache配置等)

    一.配置https网站 1.自建CA (1)生成私钥文件 mkdir -p /etc/pki/CA/private #创建私钥保存的目录 (umask 077;openssl genrsa -out ...

  7. fpm定制化RPM包之nginx rpm包的制作

    fpm定制化RPM包之nginx rpm包的制作 1.安装ruby模块 # yum -y install ruby rubygems ruby-devel 2.添加阿里云的Rubygems仓库,国外资 ...

  8. 使用fpm简单制作自定义rpm包

    我的环境是centos7.2的 一.安装FPM工具 yum -y install ruby rubygems ruby-devel gem sources list   查看gem包管理源仓库地址 g ...

  9. php socket ubuntu,Ubuntu升级php7.0配置fpm socket

    简单说 --(我也就知道这么多)--,nginx处理请求是通过fpm(来管理fastcgi的)来实现请求和响应. 而nginx和php-fpm可以通过监听9000端口(默认)或者socket来实现. ...

  10. fpm制作mysql rpm包_fpm制做mysql-5.6.33 rpm包

    增加用户: # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin -M -d /data/my_db mysql 源码安装mysql-5 ...

最新文章

  1. 将表里的数据批量生成INSERT语句的存储过程 增强版
  2. tags cloud
  3. 10-3 5-3 查询生产最高速度的计算机(PC或便携式电脑)厂商 (20 分)
  4. C语言中 . 和 - 区别详解(举例解释)
  5. SharePoint 站点集和子站点数据互相读取
  6. 【200以内素数】C语言
  7. javascript_video_2
  8. 二进制与十进制转换器
  9. c#中屏蔽窗体关闭的消息
  10. 数字媒体技术基础之三:分辨率
  11. 实训项目——多语言学习app 总结报告
  12. css sprite与background-size结合实现背景图片等比缩放
  13. 服务器主机GHOST装系统,大神请绕道!科普电脑装系统最基本的两种方式,萌新千万不要错过...
  14. 艺赛旗RPA 第三方库系列(一):如何调用 Python 第三方库
  15. Day 10-常用 Composition API_toRef toRefs
  16. python中choice的用法_Python3 choice 函数
  17. 孟凯想玩转大数据,得先看懂《小时代》
  18. 多媒体技术与应用之图像Huffman编解码
  19. WPF 实现阿里云OSS私人云盘上传
  20. 真阳假阳真阴假阴指标(TP,FP,TN,FN)精度Precision 准确率Accuracy 召回率Recall 总结

热门文章

  1. 服务器出现宕机的常见原因有哪些
  2. 在一个div后面追加html,javascript div元素后追加节点
  3. php中如何实现逻辑删除,手残党的免死金牌:为Typecho增加逻辑删除功能
  4. 第四篇 彩云之南(2017.1.31-2017.2.8)
  5. 市值仅剩三分之一,电商生态系统能否助力唯品会脱困?
  6. 科学计数法转换浮点数【golang】
  7. java ucs2解码,短信中的的 UCS2的编码与解码步骤(java)
  8. html css输入框获得焦点、失去焦点效果
  9. 《Computer Graphics》 Peter.Shirley读书笔记
  10. win10域增加计算机本地用户,win10肿么从域用户登陆本地账户