讲php fpm的书,细说PHP-fpm

最近在研究PHP的源码,有时候会延伸到很多东西。这里就专程找了下php-fpm的内容学习下。

是什么?

在理解php-fpm之前,我们要先搞清楚几个关键词以及他们之间的关系:CGI

FastCGI

php-fpm

php-cgi.

CGI:(Common Gateway Interface),即通用网关接口的意思,描述的是服务器和请求处理程序之间传输数据的一种标准。 所以,CGI是一种协议。CGI可用于任何语言,只要该语言具有标准的输出、输入以及环境变量。如perl、php等语言。 以nginx和php为例,我们可以理解为,这是php在与nginx服务器之间交互时,对传输数据的一种约定。

在《HTTP权威指南》书中,是这么描述的

CGI是一个标准接口集,Web 服务器可以用它来装载程序以响应对特定 URL 的 HTTP 请求,并收集程序的输出数据,将其放在 HTTP 响应中回送。

那CGI的原理是什么呢

当需要请求使用网关的资源时,服务器会请辅助应用程序来处理请求(比如nginx会请php程序来处理请求)。 服务器会将辅助应用程序的数据传送给网关。然后网关会向服务器返回一条响应或者响应数据,服务器再将响应或响应数据转发给客户端。

由此我们可以清楚两点:

服务器和网关是相互独立的应用程序

服务器是应用程序和网关之间的一座桥梁

具体原理如图所示:

8e85ee50b0c2

image.png

由此,我们可知CGI有一个致命的弱点,即应用程序的每次请求,都要引发一个全新的进程。所以,服务器和网关之间的分离会造成性能的 耗费,会限制使用CGI的服务器的性能,并且会加重服务端机器资源的负担。

好啦,重角要登场了。后来为了解决这个问题,出现了FastCGI,也就是快速的CGI。 接下来,我们再详细的了解下FastCGI。

FastCGI:(Fast Common Gateway Interface),即快速通用网关接口,是一种让交互程序与Web服务器通信的协议。它是CGI的增强版本

FastCGI致力于减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。

以上来自维基百科,我们可以由此了解到,FastCGI,同CGI一样,也是一种协议,只不过它是CGI的增强版本。

那FastCGI是如何增强性能的呢?

FastCGI接口模拟了CGI,但FastCGI是作为持久守护进程运行的,消除了为每个请求建立或拆除新进程所带来的性能损耗。也就是允许,一个进程内可以处理多个请求。 也就说CGI解释器保持在内存中,并接受了FastCGI进程管理和调度,所以它可以提供更好的性能,可扩展性,故障切换等特点

FastCGI的特点

FastCGI与语言无关

FastCGI应用在进程中,独立于核心网络服务器,提供了一个比API环境更安全的环境。 APIs的代码和web服务器的应用的核心是 紧紧关联的。这也就意味着在API应用程序的错误可能会损坏其它应用程序或核心服务器。恶意API应用程序代码甚至可以窃取另一个应用程序或核心服务器密钥。

FastCGI技术摸钱支持PHP,C/C++, Java language, Perl, Tcl, Python, SmallTalk, Ruby etc.. 它在Apache, ISS, Lighttpd和其他流行的 服务器中的相关模块都是可以使用的。FastCGI不依赖于任何服务器体系结构,所以即使服务器在技术上改变了,FastCGI还是稳定的

FastCGI的工作原理

Web Server 启动时载入FastCGI进程管理器 (IIS ISAPI 或Apache Module)

FastCGI进程管理器首先初始化自己,启动一批CGI解释器进程(可见多个php-cgi),然后等待来自Web Server的连接。

当Web Server中的一个客户端请求达到时, FastCGI进程管理器会选择并连接一个CGI解释器。Web server的CGI环境变量和标准输入会被送达FastCGI进程的php-cgi。

FastCGI子进程从同一连接完成返还给Web Server的标准输出和错误信息。当请求进程完成后,FastCGI进程会关闭此连接。FastCGI会等待并出来来自FastCGI进程管理器(运行在Web Server中的)的下一个连接。 在CGI模式,php-cgi然后会退出。

FastCGI的不足

因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。 Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M10=150M),开启的64个php-cgi进程消耗1280M内存(20M64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。 如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。

PHP-CGI: PHP-CGI是PHP自带的FastCGI管理器。

PHP-CGI的不足

php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启

直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)

php-fpm

PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在

PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。

现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。 PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓微软雅黑字体ttf_618巨献丨精致的悦黑5字重小字体

悦黑字体简介去年双十一当天,小编应大家要求,分享了一款悦黑小字体,苹果和安卓都有:双十一巨献:令人瑟瑟发抖的5字重悦黑小字体大半年时间过去了,一直没有更新,今天抽空更新一下。悦黑是由造字工…

伪静态隐藏域名后缀_你想知道的动态URL、静态URl、伪静态URL概念及区别都在这里!...

【小宅按】我们说url的动态、静态、伪静态三种形式,其实从严格分类上来说,伪静态也是动态的一种,只是表现形式为静态。参考:动态url、静态url和伪静态url的详细讲解 - 好文分享动态URl动态页面的特征1、以ASP、PHP、JSP、ASP.NET …

700多位老人的“智慧”养老记

“智慧”养老,受益的不只是居住养老公寓的老年人,养老机构本身也受益匪浅。 2012年12月,由汇晨养老公司机构管理有限公司(简称汇晨养老公司)与NEC中国共同开发的智能老年公寓信息化系统投入运行,生活在北京昌平区北七家汇晨老年公…

docker 安装nginx_docker安装nginx搭建简单文件共享服务

使用nginx开启目录浏览功能,实现简单的http文件共享服务。一、 首先拉取nginx镜像,我使用的是arm32v7/nginx镜像。docker pull arm32v7/nginx二、运行一个临时的nginx实例,复制容器内的nginx.conf配置文件到主机上docker run --name tmp-ngin…

java _web之Servlet简单应用

Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的web页面。它担当Web浏览器或其他http客户程序发出请求、与http服务器上的数据库或应用程序之间交互的中间层。 所谓动态网页,就是在不同时刻或不同条件下访问Web服务器上的同一个页…

mysql redis hbase_MySQL之基本介绍

MySQL基本介绍在学习任何一款编程语言的过程中,我们会发现如果我们想要存储一些数据到本地硬盘的时候无疑是有些麻烦的。今天,我们就学一个和储存数据有关的数据库管理系统——MySQL。为啥要学会使用数据库呢?因为数据库可以方便的将数据存放…

linux mysql 修改root密码_Mac下重置mysql的root密码

php中文网最新课程每日17点准时技术干货分享我的mysql版本 MYSQL V5.7.9,旧版本请使用:UPDATE mysql.user SET PasswordPASSWORD(新密码) WHERE Userroot;Mac OS X - 重置 MySQL Root密码密码太多记不住??你是否忘记了Mac OS 的My…

DHCP option 150与option 66的区别

转载于:https://blog.51cto.com/jaymimijay/1150777

python期末知识点_史上最全的Python知识点整理之基本语法

一、程序的格式框架 1.缩进 缩进是指每行语句前的空白区域,用来表示Python程序间的包含和层次关系。 一般语句不需要缩进,顶行书写且不留空白。 当表示分支、循环、函数、类等含义,在if,while,for,def&…

php网页多个倒计时,怎么实现一个页面有多个倒计时同时进行

后台返回时间,一个页面中有多个表格每个表格中有一行用来显示后台给的时间,比如说后台给一号表格10分钟的倒计时时间,给2号表格15分钟的倒计时时间,那我要怎么做才能使得这两个倒计时都能进行??我自己模拟了…

opencv在python环境下的安装_python环境下安装opencv库的方法

注意:安装opencv以前须要先安装numpy,matplotlib等python 1、安装方法windows 方法1、在线安装函数 1.先安装opencv-python测试 pip install opencv-python --userspa个人python版本是3.6.8,能够看到opencv安装的默认版本是 opencv_python-4.…

接口的创建及使用

接口是全局变量和公共的抽象方法集合。它也是一种定义数据类型的方式,与类相比 相同之处:都是成员变量和成员方法也可以形成继承关系。 不同之处:接口中的属性都是常量(final)接口中的方法是抽象方法(没有方…

movielens推荐系统_基于内容推荐(二)

A content-based movie recommender system using MovieLens tags (用标签构建一个简单的电影推荐系统)现在有很多电影。如果没有某种推荐系统,您会担心,随着时间的流逝,用户可能会被他们不关心的电影所淹没。因此&…

HALCON 1D Measure 算子初识

基本上1D Measure都是建立一个ROI(region of interest,感兴趣区域),然后在感兴趣区域提取出边界的测量。常见的ROI有矩形ROI和圆环ROI。 下图为一个矩形ROI,中间的Profile Line为横截线,Center是行和列的坐标,Phi指定了…

python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的“mvc框架”。 一、设计登录界面 下面开始第一个话题,使用pycharm的 PyQt5 Designer 做一个简单的界面。 上一篇最后,在pycharm中配置了PyQt5 Designer 和 uic&#xf…

Ubuntu识别USB设备

参考:如何解决Ubuntu无法识别USB设备 作者:一只青木呀 发布时间:2020-08-28 21:02:00 网址:https://blog.csdn.net/weixin_45309916/article/details/108286829 目录1、U盘识别2、识别转换解决Ubuntu无法识别USB3.0方法一&#xf…

解除单个文件的与svn服务器的关联

有些文件和个人开发环境有关不需要和svn服务器做同步,可以取消其和svn服务的关联。 右键选中要取消关联的文件,右键菜单 Tortoise SVN ---> unversion and add to ignore list 确定后,文件图标会变成一把小剪刀,说明已经…

Ubuntu磁盘扩容及启动问题整理

参考:Ubuntu磁盘扩容及启动问题整理 作者:一只青木呀 发布时间: 2020-12-08 10:42:19 网址:https://blog.csdn.net/weixin_45309916/article/details/110850358 也可参照正点原子的:Ubuntu磁盘空间不足?一招…

函数求值需要运行所有线程_精读《深度学习 - 函数式之美》

1 引言函数式语言在深度学习领域应用很广泛,因为函数式与深度学习模型的契合度很高,The Beauty of Functional Languages in Deep Learning — Clojure and Haskell 就很好的诠释了这个道理。通过这篇文章可以加深我们对深度学习与函数式编程的理解。2…

Ubuntu下无法看到共享文件夹的解决办法

参考:Ubuntu下无法看到共享文件夹的解决办法 作者:一只青木呀 发布时间:2020-08-07 10:09:04 网址:https://blog.csdn.net/weixin_45309916/article/details/107856157 今天早上起来突然发现共享文件夹的查看不到了,找…