环境(64位Win7): IIS7+PHP5.4(NTS非线程安全版本) vs Apache2.4(32位)+PHP5.4
静态文件处理:
ab -k -c100 -n10000 http://127.0.0.1/info.htm
# IIS RPS 1709
ab -k -c100 -n10000 http://127.0.0.1:8080/info.htm
# Apache RPS 1847
结论:基于APR运行时和WinNT多线程的Apache在静态资源处理方面并不比IIS差.
PHP文件处理:
ab -k -c100 -n10000 http://127.0.0.1/bs.php
# IIS RPS 1180
ab -k -c100 -n10000 http://127.0.0.1:8080/bs.php
# Apache RPS 1071
结论:Apache使用了线程化的MPM,所以需要使用线程安全版本的PHP,而线程安全检查有一定开销,所以性能要比IIS+PHP-CGI低一些.
info.htm是IIS下phpinfo()输出HTML内容.
bs.php是一个执行100次冒泡排序的PHP脚本,内容如下:
<?php
header('Content-Type: text/plain; charset=utf-8');
function bubble_sort($array) {
$size = count($array);
for ($i=0;$i<$size;$i++) {
for ($j=0;$j<$size-1-$i;$j++) {
if ($array[$j] < $array[$j+1]) {
$temp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $temp;
}
}
}
return $array;
}
for ($c=0;$c<100;$c++) {
$array = array(0,1,2,3,4,5,6,7,8,9);
$array = bubble_sort($array);
}
print_r($array);
?>
在一次IIS7+PHP的phpinfo()测试中,100并发,10000个请求,
居然有8978个请求失败了!
附: Windows 7 上安装 IIS 和 PHP
安装IIS:
控制面板-程序和功能-打开或关闭Windows功能:
Internet信息服务 - Web管理工具 - IIS管理控制台 打勾
Internet信息服务 - 万维网服务 - 常见 HTTP 功能 - HTTP 错误 打勾
Internet信息服务 - 万维网服务 - 常见 HTTP 功能 - 静态内容 打勾
Internet信息服务 - 万维网服务 - 应用程序开发功能 - CGI 打勾
点击确定等待安装完成,重启操作系统.
默认网站根目录:
C:\inetpub\wwwroot
控制面板-管理工具-Internet信息服务(IIS)管理器: 可以看到"FastCGI设置".
PHP Manager 1.2 for IIS 7
http://phpmanager.codeplex.com/
控制面板-管理工具-Internet信息服务(IIS)管理器: 可以看到"PHP Manager".
PHP NTS:
http://windows.php.net/
控制面板-管理工具-Internet信息服务(IIS)管理器-"PHP Manager"-"Register new PHP version"填入:
D:\png\php\5.4.39NTS\php-cgi.exe
点击"check phpinfo()",选择一个用于检查PHP环境的站点,检查PHP是否安装成功.
如果注册了多个PHP版本,可以点击"Change PHP version"切换.