- 浏览: 7853520 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
FASTCGI其实是个好东西,可以说是CGI的提升版,本文进行小结
1 FASTCGI和CGI
CGI全称是“通用网关接口”(Common Gateway Interface),它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序,请求数据。 CGI描述了客户端和这个程序之间传输数据的一种标准。 CGI的一个目的是要独立于任何语言的,所以CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
工作原理:
1 Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2 FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4 FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
2 FASTCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。 Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
3 什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
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。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
4 配置
载用于 Apache 的 mod_fastcgi。我使用的是 mod_fastcgi-2.4.2-AP20.dll(因为我的Apache是2.0)。下载后将这个文件复制到 Apache 的 modules 目录中。将mod_fastcgi-2.4.2-AP20.dll改名为mod_fastcgi.dll。
然后修改 httpd.conf 文件,加入下面几行:
LoadModule fastcgi_module modules/mod_fastcgi.dll
#FastCgiConfig -maxClassProcesses 150 -maxProcesses 350 -idle-timeout 30
ScriptAlias /fastcgi-bin/ "D:/Program Files/Apache Software Foundation/php5/"
FastCgiServer "D:/Program Files/Apache Software Foundation/php5/php-cgi.exe" -processes 4
AddType application/x-httpd-fastphp5 .php
#AddHandler fastcgi-script .php
#FastCgiExternalServer "D:/Program Files/Apache Software Foundation/php5/php-cgi.exe"
Action application/x-httpd-fastphp5 "/fastcgi-bin/php-cgi.exe"
修改完成后,重新启动 Apache 即可。
FastCGI 模式运行 PHP 的优点:
以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好
5 使用fastcgi_finish_request提高页面响应速度
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法
来提高速度:
<?phpecho '例子:';fastcgi_finish_request(); /* 响应完成, 关闭连接 *//* 记录日志 */file_put_contents('log.txt', '生存还是毁灭,这是个问题.');?>
通过浏览器访问此脚本, 结果发现并没有输出相应的字符串,但却生成了相应的文件.由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!
合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子:
代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志.
1 FASTCGI和CGI
CGI全称是“通用网关接口”(Common Gateway Interface),它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序,请求数据。 CGI描述了客户端和这个程序之间传输数据的一种标准。 CGI的一个目的是要独立于任何语言的,所以CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
工作原理:
1 Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2 FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4 FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
2 FASTCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。 Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
3 什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
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。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
4 配置
载用于 Apache 的 mod_fastcgi。我使用的是 mod_fastcgi-2.4.2-AP20.dll(因为我的Apache是2.0)。下载后将这个文件复制到 Apache 的 modules 目录中。将mod_fastcgi-2.4.2-AP20.dll改名为mod_fastcgi.dll。
然后修改 httpd.conf 文件,加入下面几行:
LoadModule fastcgi_module modules/mod_fastcgi.dll
#FastCgiConfig -maxClassProcesses 150 -maxProcesses 350 -idle-timeout 30
ScriptAlias /fastcgi-bin/ "D:/Program Files/Apache Software Foundation/php5/"
FastCgiServer "D:/Program Files/Apache Software Foundation/php5/php-cgi.exe" -processes 4
AddType application/x-httpd-fastphp5 .php
#AddHandler fastcgi-script .php
#FastCgiExternalServer "D:/Program Files/Apache Software Foundation/php5/php-cgi.exe"
Action application/x-httpd-fastphp5 "/fastcgi-bin/php-cgi.exe"
修改完成后,重新启动 Apache 即可。
FastCGI 模式运行 PHP 的优点:
以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好
5 使用fastcgi_finish_request提高页面响应速度
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法
来提高速度:
<?phpecho '例子:';fastcgi_finish_request(); /* 响应完成, 关闭连接 *//* 记录日志 */file_put_contents('log.txt', '生存还是毁灭,这是个问题.');?>
通过浏览器访问此脚本, 结果发现并没有输出相应的字符串,但却生成了相应的文件.由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!
合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子:
<?phpecho '例子:';file_put_contents('log.txt', date('Y-m-d H:i:s') . " 上传视频\n", FILE_APPEND);fastcgi_finish_request();sleep(1);file_put_contents('log.txt', date('Y-m-d H:i:s') . " 转换格式\n", FILE_APPEND);sleep(1);file_put_contents('log.txt', date('Y-m-d H:i:s') . " 提取图片\n", FILE_APPEND);?>
代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志.
发表评论
-
11个php日常用的小tips 代码片段
2014-01-21 20:34 1890http://www.phpzag.com/11-useful ... -
php中的DirectoryIterator和RecursiveDirectoryIterator
2013-07-27 22:50 3474php中,可以用用DirectoryIterator获取指定目 ... -
uccenter中找回创始人密码
2013-03-11 19:12 1870偶然忘记了uccenter中的创始人密码,一查看,其实找回 ... -
php中通过register_shutdown_function记录fatal error
2013-02-09 23:56 2929今天发现php中,如果要记录fatal error的时候, ... -
php中检查是否ajax请求
2013-01-19 09:53 1443$ajax = false; if(!empty ... -
php中检查某个网页地址是否有效能被打开的最简单方法
2012-10-22 16:18 2058php中检查某个网页地址是否有效能被打开的最简单方法,其实可以 ... -
小结几个php操作office的类库
2012-07-20 19:16 19021 phpexcel 最强大完整的类库了,地址在: ht ... -
介绍几个PHP的开源不错的图片类库
2012-07-14 13:11 2844介绍几个PHP的开源不错的图片类库 1 pchart ... -
php中__sleep和__wakeup
2012-06-22 09:39 4482在php中,__sleep和___wakeup是两个分别自 ... -
PHP 5.4正式版重要新特性
2012-05-25 08:34 1630原文发表在:http://tech.it168.com/a20 ... -
用php实现备份数据库ZIP及导出
2012-04-17 08:59 1807经常在有的PHP开源系统中,看到有备份数据库并导出的方法 ... -
PHP Codeigniter 中的_remap方法简介
2012-04-05 21:06 4537在Codeigniter 中,其实有个容易忽略掉的不错的控 ... -
PHP 5.4中的traits初探
2012-04-01 19:57 5006PHP 5.4中的traits,是新引入的特性,中文还真不知道 ... -
php中的pdo和mysqli的对比选择
2012-03-10 22:25 7112在PHP中,如何选择PDO和mysqli呢?本文做个简单的 ... -
php 5.4中新增加对session状态判断的功能
2012-02-20 12:28 3923在以前的php 版本中,要判断session是否有效,只能 ... -
php curl的几段小应用
2012-02-07 10:10 1778php 的CURL是不错的功能,下面收藏几段不错的片段 1 ... -
php 5.3中的一个type hinting的用法
2012-01-20 11:50 2270今天偶然看php 5.3中的一个特性,叫type hintin ... -
cakephp的分页排序
2012-01-04 10:38 4204cakephp中的分页还是很简单的,下面例子复习下 1 数据 ... -
mongodb+php学习1
2012-01-03 11:51 51881 mongodb启动时,设置启动项 C:\>mon ... -
php中挺好用的strtotime方法
2011-12-20 11:32 1920在PHP中,经常要对日期进行计算,比如要计算一个月前的日期 ...
相关推荐
免安装集成包,下载后看说明文档 只需点击.bat文件便安装完成 不需要再管什么非线程安全 不需要再管什么fastCGI模式 由于文件太大,不能上传 只上传一个链接地址 下载后打开用里面的链接地址下载
IIS6+php5.3+FASTCGI+mysql+phpmyadmin配置手册.pdf
搭建IIS7(FastCGI)+php5.3+MySQL+phpMyAdmin服务器环境.pdf
精品图文教程IIS+FastCGI+PHP5.3+MySQL5.1+Gzip
最全的IIS+FastCGI+PHP5.3+MySQL5.1+Gzip详细教程(网络转载)
IIS+FastCGI+PHP5.3+MySQL5.1+Gzip详细配置图文教程.pdf
IIS+FastCGI+PHP5.3+MySQL5.1+Gzip详细教程[汇编].pdf
Apache2.2 + FastCGI + gSOAP搭建 WebService工具,内含: 1、fcgi-2.4.1-SNAP-0910052249.tar.gz 2、mod_fcgid-2.3.9-crlf.zip 3、httpd-2.2.25-win32-x86-openssl-0.9.8y.msi
说明: 本帖是我经过一天一夜完成的,不同于一般网上文章,除详细的将整个配置过程和 测试过程都详细截图说明外,尤其在FastCGI方面采用微软的...本 帖旨在帮助新手快速配置出IIS + FastCGI + PHP5.3 + MySQL5.1 + Gz
Debian+Nginx+PHP(FastCGI)+MySQL搭建LNMP服务器
Debian+Nginx+PHP(FastCGI)+MySQL搭建LNMP服务器(二版)
最近发现以前写的配置文档有一点问题,所以修改了之前的错误,把这篇较完善的文章给大家。
One way of doing it is using mod_php5 Apache module to serve PHP 5.3 applications, while running PHP 5.2 applications using fastcgi module. Under Ubuntu 12.04 this can be achieved by installing PHP ...
构架Nginx+PHP(Fastcgi)+MySQL+Memcache高性能web服务器
本文是详细的将整个配置过程和 测试过程都详细截图说明外,尤其在FastCGI方面采用微软的“web平台安装程序”来配置,网上相关内容很少,对gzip的设置也很详细,保证按图操 作即可独立完成。另外,还有详细的测试gzip...
早就听说最新的Windows Server 2008+IIS下边跑PHP并不比Linux差很多,而且微软已经和ZEND合作,专门针对IIS推出了FastCGI的支持,并且在IIS7.0之后就将FastCGI集成在IIS中,还有PHP的配置工具PHP Manager,所以在...
需要在IIS6.0下配置PHP,由于php 5.3.3已经不再支持isapi配置了,因此需采用fastcgi方式配置