互联网创业的准备——web server:apache、nginx、lighttpd与php module、fastcgi

it2025-03-30  17

测试环境:

vr.org 的 VPS

CPU:2核共享

内存:512M独立

OS:Ubuntu 12.04 LTS x64

uname -a u1@www:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 DISTRIB_CODENAME=precise DISTRIB_DESCRIPTION="Ubuntu 12.04 LTS" u1@www:~$ uname -a Linux www.shaixuan.org 3.4.0-cloud #1 SMP Thu May 24 04:54:53 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux u1@www:~$ top top - 23:57:39 up 1:38, 2 users, load average: 0.04, 0.03, 0.16 Tasks: 55 total, 1 running, 54 sleeping, 0 stopped, 0 zombie Cpu(s): 0.7%us, 0.4%sy, 0.0%ni, 97.6%id, 0.1%wa, 0.0%hi, 0.1%si, 1.1%st Mem: 506764k total, 125264k used, 381500k free, 7736k buffers Swap: 499708k total, 0k used, 499708k free, 70096k cached

软件版本:Apache httpd 2.4.3、nginx 1.2.3、lighttpd 1.4.31、php 5.4.6

 

结论:

静态服务器:

并发:nginx(17000)> lighttpd(14000)> apache(5000)

注意:lighttpd开启gzip压缩时,无法禁用etag……不建议使用。参考:《高性能网站建设指南》

 

动态服务器:

大约并发:nginx + php-fpm(1500)> lighttpd + spawn-fcgi(1000)>apache + php module(400)

注意:web server与fastcgi在同一个机器时,建议使用unix domain socket,比tcp socket效果好一点点。

 

虽然apache httpd 2.4 像 nginx一样使用了epoll,但是性能还是比nginx低很多。

服务器OS一定要使用Linux 2.6内核及更高,因为才能支持epoll。

建议服务器使用Ubuntu server LTS x64,因为工程师PC使用Ubuntu x64较多(Ubuntu的显卡驱动安装方便),这样编译部署都一致。

Ubuntu、CentOS等各个Linux发行版对服务器来说没有区别,内核都一样,挑一个顺手的即可。

 

参考互联网公司的web server:

163.com静态nginxt.qq.com静态squid,动态nginxtaobao.com静态Tengine,动态Tengine(nginx衍生版)小米论坛静态Tengine,动态Tengine百度静态lighttpd,动态lighttpd(有etag)

 

 

 

测试过程:

Apache httpd 2.4.3

编译参数:

apache ./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/home/u1/pcre-8.30 --enable-so --enable-rewrite --enable-deflate --with-module=metadata:expires

MPM:默认event

httpd -V root@www:/usr/local/apache2/bin# ./httpd -V Server version: Apache/2.4.3 (Unix) Server built: Aug 26 2012 10:27:04 Server's Module Magic Number: 20120211:6 Server loaded: APR 1.4.6, APR-UTIL 1.4.1 Compiled using: APR 1.4.6, APR-UTIL 1.4.1 Architecture: 64-bit Server MPM: event threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/usr/local/apache2" -D SUEXEC_BIN="/usr/local/apache2/bin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf"

默认并发400,MaxRequestWorkers即以前的MaxClients,参考:http://httpd.apache.org/docs/2.4/mod/mpm_common.html#MaxRequestWorkers

<IfModule mpm_event_module> StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 0 </IfModule>

并发改成40000,提示错误,加上ServerLimit即可:

u1@www:~$ sudo vi /usr/local/apache2/conf/extra/httpd-mpm.conf u1@www:~$ sudo vi /usr/local/apache2/conf/httpd.conf u1@www:~$ sudo /etc/init.d/apache2 restart AH00515: WARNING: MaxRequestWorkers of 40000 would require 1600 servers and would exceed ServerLimit of 16, decreasing to 400. To increase, please see the ServerLimit directive.

 

nginx 1.2.3:

编译参数:

View Code ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre

 

lighttpd 1.4.31:

默认并发1024,server.max-fds最大可修改为65535,server.max-connections最大可修改为32767:

193 ## 194 ## As lighttpd is a single-threaded server, its main resource limit is 195 ## the number of file descriptors, which is set to 1024 by default (on 196 ## most systems). 197 ## 198 ## If you are running a high-traffic site you might want to increase this 199 ## limit by setting server.max-fds. 200 ## 201 ## Changing this setting requires root permissions on startup. see 202 ## server.username/server.groupname. 203 ## 204 ## By default lighttpd would not change the operation system default. 205 ## But setting it to 2048 is a better default for busy servers. 206 ## 207 server.max-fds = 2048 218 219 ## 220 ## Fine tuning for the request handling 221 ## 222 ## max-connections == max-fds/2 (maybe /3) 223 ## means the other file handles are used for fastcgi/files 224 ## 225 server.max-connections = 1024

 

 

1、静态服务器测试

即apache、nginx、lighttpd性能对比。

服务器相同配置 :

开启gzip、关闭etag

测试程序和web server在同一台服务器上,测试命令:

ab -c 1000 -n 50000 http://localhost/index.html siege -c 1000 -r 20 http://localhost/index.html

 

apache:html文件13k,gzip压缩为4.9k

header:

apache

测试结果:

并发 httpd子进程数整机512M内存使用率CPU使用率iowait0319%0010001030%38%030001460%38%0500010-3065%-99%20%-40%0-30800010099%3%-50%20-100

 

 

nginx:html文件13.2k,gzip压缩为5.34k

header:

nginx Request URL:http://shaixuan.org/index.html Request Method:GET Status Code:200 OK Request Headersview source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:UTF-8,*;q=0.5 Accept-Encoding:gzip,deflate,sdch Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:no-cache Connection:keep-alive Host:shaixuan.org Pragma:no-cache User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.8 (KHTML, like Gecko) Chrome/23.0.1251.2 Safari/537.8 Response Headersview source Connection:keep-alive Content-Encoding:gzip Content-Type:text/html Date:Mon, 03 Sep 2012 13:19:23 GMT Last-Modified:Mon, 03 Sep 2012 12:33:45 GMT Server:nginx/1.2.3 Transfer-Encoding:chunked

测试结果:

 并发整机512M内存使用率CPU使用率iowait029%00100035%40%0300046%43%0500055%42%0-1800065%45%01500088%45%01700097%47%0

 

lighttpd:html文件13k,gzip压缩为4.96k

header:

lighttpd Request URL:http://shaixuan.org/ Request Method:GET Status Code:200 OK Request Headersview source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:UTF-8,*;q=0.5 Accept-Encoding:gzip,deflate,sdch Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control:max-age=0 Connection:keep-alive Host:shaixuan.org Pragma:no-cache User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.8 (KHTML, like Gecko) Chrome/23.0.1251.2 Safari/537.8 Response Headersview source Accept-Ranges:bytes Content-Encoding:gzip Content-Length:4819 Content-Type:text/html Date:Tue, 04 Sep 2012 12:51:42 GMT ETag:"1028714895" Last-Modified:Tue, 04 Sep 2012 12:29:10 GMT Server:lighttpd/1.4.31 Vary:Accept-Encoding

测试结果:

 并发整机512M内存使用率CPU使用率iowait029%001000  0300046%41%0-6500060%40%0-1800075%45%01200081%35%01400087%36%01600099%40%0

 

 

2、动态服务器测试

即apache + php module、nginx + php-fpm、nginx + php-cgi、lighttpd + spawn-fcgi对比。

测试命令:

siege -c 1200 -r 20 http://localhost/phpinfo.php /usr/local/apache2/bin/ab -c 100 -t 50 http://localhost/phpinfo.php

 

 

php版本 5.4.6,测试代码phpinfo();

 

apache + php module:php文件63.57k,gzip压缩为11.21k

测试结果:

 并发整机512M内存使用率CPU使用率iowait029%0010068%8%020072%10%040095%10%060099%15%1-15

 

nginx + php-fpm(多个php-fpm子进程):php文件57.41k,gzip压缩为10.84k

phpinfo显示Server API:FPM/FastCGI

fastcgi的socket方式:tcp socket

php编译参数:

php-fpm ./configure --prefix=/usr/local/php-fpm --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-curl --with-mcrypt --enable-mbstring --enable-pdo --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-zip

测试结果:

 并发整机512M内存使用率CPU使用率iowaitsiege成功率033%00 10037%8%0100%200    40045%10%099.96%80055% 14个php-fpm,每个5.9M12%096.31%100060%10%090.77%120069%,Linux file限制,测试出错30%  

 

nginx + php-fpm(多个php-fpm子进程):php文件54.57k,gzip压缩为9.16k

phpinfo显示Server API:FPM/FastCGI

fastcgi的socket方式:unix domain socket

测试结果:

 并发整机512M内存使用率CPU使用率iowaitsiege成功率032%00 10035%7%0100%20040%12%0100%40043%14%0100%80055%14%096.70%100060% 21个php-fpm,每个5.9M14%092.02%120050%,Linux file限制,测试出错50% 049%

 

nginx + 一个php-cgi:php文件64.65k,gzip压缩为11.89k 

sudo /usr/local/php-fpm/bin/php-cgi -b 9000 -q

php-cgi可以常驻(long-live)监听一个端口,所以是fastcgi,但是由于没有进程管理器,只能启动一个进程,并发承受力低。

phpinfo显示Server API:FPM/FastCGI

测试结果:

并发100时,经过5秒,php-cgi崩溃退出。

 

lighttpd + lighttpd自带的spawn-fcgi进程管理器(多个php-cgi子进程):php文件58.68k,gzip压缩为9.83k 

phpinfo显示Server API:CGI/FastCGI

fastcgi的socket方式:unix domain socket

lighttpd的fastcgi.conf配置:

fastcgi.server 22 fastcgi.server = ( ".php" => 23 ( "php-local" => 24 ( 25 "socket" => socket_dir + "/php-fastcgi-1.socket", 26 "bin-path" => "/usr/local/php-fpm/bin/php-cgi", 27 "max-procs" => 2, 28 "broken-scriptfilename" => "enable", 29 "bin-environment" => ( 30 "PHP_FCGI_CHILDREN" => "16", 31 "PHP_FCGI_MAX_REQUESTS" => "500", 32 ), 33 ) 34 ),

测试结果:

 

 并发整机512M内存使用率CPU使用率iowaitsiege成功率053% 34个php-cgi进程,每个3M00 10065% 每个5.3M10%0 20065% 每个5.7M10%0100%40072% 每个5.7M11%0100%80084% 每个5.7M10%099.49%100090% 每个5.7M12%097.41%1200Linux file限制,测试出错   

 

参考资料:

http://www.cnblogs.com/killkill/archive/2010/04/14/1711810.html

http://httpd.apache.org/docs/2.4/mod/mpm_common.html#MaxRequestWorkers

http://www.php.net/manual/zh/install.fpm.php

http://www.niutian365.com/blog/article.asp?id=263

http://redmine.lighttpd.net/projects/1/wiki/Docs_ModCompress

http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_PerformanceFastCGI

http://php.net/manual/zh/install.unix.lighttpd-14.php

http://www.361way.com/mpm/1052.html

http://blog.chinaunix.net/uid-13939710-id-2861331.html

http://www.yylib.com/blog/?p=70

http://kb.cnblogs.com/page/95605/

http://www.dbanotes.net/web/lighttpd_spawn-fcgi.html

http://www.mike.org.cn/articles/what-is-cgi-fastcgi-php-fpm-spawn-fcgi/

http://www.php.net/manual/zh/install.unix.apache2.php

http://ferreousbox.iteye.com/blog/196212

http://nigelzeng.iteye.com/blog/1197339

http://blog.csdn.net/tujiyue/article/details/7027134

转载于:https://www.cnblogs.com/sink_cup/archive/2012/09/14/web_server.html

相关资源:数据结构—成绩单生成器
最新回复(0)