环境
系统 win7 x64 8G内存 ADM7750双核
对比
1) Apache 2.4.9 + php5.5.12 ts vc11
2) NGINX 1.6.2 + PHP-FPM
代码
<?php
# http://localhost/hello.php
echo "hello";
<!-- http://localhost/js.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body></html>
测试
./ab -c10 -n1000 http://localhost/hello.php
./ab -c10 -n1000 http://localhost/js.html
结果
js.html hello.php
nginx 0.907sec 1102/sec timeout error
apache 0.695sec 1439/sec 0.198s 1089/sec
疑问
现在所有的都推荐 nginx,可为什么nginx的吞吐量无论是 纯HTML 还是 单独的PHP都比不过Apache
UGC 的平台 更适合于 Apache 还是 nginx?
Windows 7 上 IIS 和 Apache 性能对比测试
IIS + php-cgi.exe(NTS) vs Apache + php5apache2_4.dll(TS)
环境(64位Win7): IIS7+PHP5.4(NTS非线程安全版本) vs Apache2.4(32位)+PHP5.4
静态文件性能:
结论:基于APR运行时和WinNT多线程的Apache在静态资源处理方面并不比IIS差.
PHP性能:
结论:Apache使用了线程化的MPM,所以需要使用线程安全版本的PHP,而线程安全检查有一定开销,所以性能要比IIS+PHP-CGI低一些.
Nginx并非基于多线程实现高并发,而是基于epoll(Linux),kqueue(FreeBSD)事件驱动的异步网络IO机制.Nginx在Windows上用的是最原始的select,而不是Windows的IOCP,所以Windows版Nginx仅仅定位于测试和开发.要发挥Nginx真正的性能,必须在Linux或者FreeBSD上.
Apache虽然在Windows上用的也是select的系统调用,但是Apache的WINNT这个MPM是一个多线程的MPM,所以在非高并发(比如100并发)的情况下处理静态资源甚至比IIS还有优势.另外,Apache在Linux上的同样存在使用epoll的MPM,比如2.4系列默认的event MPM,就是一个epoll事件驱动的架构,主进程管理多个工作进程,每个工作进程又有多个线程,使用epoll进行异步网络IO,这是Apache面对Nginx挑战做出的有力回应.