热搜词
发表于 2009-4-20 09:20:34 | 显示全部楼层 |阅读模式
很多人都在Windows平台用IIS来跑PHP环境。如果在网络上检索一下的话,就会发现,目前IIS+PHP环境有3种方法。

1、CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少。
  特点是:稳定,但效率太低。

2、ISAPI方式加载PHP环境,通常就是IIS里面配置解释器为php5isapi.dll,目前使用最多,应用最广。
  特点是:多线程,效率较高,但不够稳定。

3、FastCGI方式加载PHP环境,在IIS环境里并不常见,但其它系统环境应用还是有的,不过IIS7.0开始内置FastCGI了。
  特点是:高效率,高稳定性,属于将来发展趋势。

今天我给大家介绍的是第三种,也就是最不常见的IIS6.0以FastCGI模式加载php环境B N Xb.com
据说相同配置下FastCGI方式加载PHP比ISAPI方式加载PHP性能提高很多, 起源网收录
今天我的重点就放在IIS6.0以FastCGI模式加载php环境的测试,看看究竟性能是不是提升了。

当然我的理由也很充分,我没有足够好的服务器,所以我要榨干服务器的资源,如果确实FastCGI的性能更好,那我就赚了:)

什么是FastCGI
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。


众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,

则可以提供良好的性能、伸缩性、Fail-Over特性等等。

FastCGI的工作原理是
1、Web Server 启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)。
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在WebServer中)的下一个连接。在正常的CGI模式中,php-cgi.exe在此便退出了。

在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。


因为进程在创建的时候CPU时间片、内存调度、IO访问消耗最多,所以FastCGI类似于常用的池技术。即预先创建好进程,等待请求。执行完成后,进程并不结束,而是返回池中。不过,按道理,这些进程执行到一定次数后,也会全部销毁再重新建立一次。

一、IIS6.0以isapi方式加载php环境并测试

我准备了一个phpinfo的页面,保存成abu.php
<php?
phpinfo();
?>

根据phpinfo的页面显示的Server API的值可知当前加载的php环境。  
Server API:ISAPI表明目前服务器是IIS+ISAPI方式加载的PHP环境。
Server API:CGI/FastCGI表明目前服务器是CGI/FastCGI加载的PHP环境。


下面进行最简单的压力测试:
我用apache里面内置的ab.exe进行最简单的压力测试:
ab -n 1000 -c 20 http://192.168.0.6/abu.php

这句话的意思是模拟出总共1000个网站请求,并发20个请求,访问服务器http://192.168.0.6/abu.php 页面
根据服务器上的截图(图略),注意,我们可以发现,服务器的CPU已经窜至80%左右。
好的,下面开始第二个阶段,换FastCGI

二、IIS6.0以FastCGI方式加载php环境并测试

IIS下可用的FastCGI扩展有很多种,我在这里给大家演示的是微软官方发布的扩展。

【下载】http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&displaylang=en

安装之后,默认是安装到%WINDIR%\system32\inetsrv路径下,当然直接拆出来用也可以。

没有图形界面,可以直接写配置文件或者通过官方配的fcgiconfig.js文件进行配置。
还是用上面的方法进行简单的压力测试
根据服务器上的截图(图略),我们可以发现,基本上CPU的消耗在30-40%左右。
三、ISAPI和FastCGI两种模式对比测试的结果

根据上面的简单测试,我们可以发现,相同硬件环境下,FastCGI方式加载PHP环境比ISAPI方式加载PHP性能提高约1倍。

把服务器换成FastCGI方式加载PHP了,性能有了明显的提高。又可以继续压榨可怜的服务器,心里十分开心。
全部评论0
回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-23 18:49 , Processed in 0.160935 second(s), 22 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team