apache2 php mod 并发,Apache2与Nginx服务器性能测试结果对比

此次作的修正:

1、ab命令的用法修正

2、加入对动态语言处理能力的比较(php)

针对此前的比较,我发现测试命令ab的并发(-c)并非每秒的请求数量,而是每次的请求数量,所以每秒可能有多个并发请求过去,所以得用限定时间周期(-t)选项。这样uptime测出来的CPU

负载也更加准确(注意-n选项一定要在-t选项后面,否则-t选项的默认值为50000,前面设置的-n选项无效)。结果显示,在持续60秒的高并发情况下,web

server的负载明显上升。

由于测试繁琐,为省力起见,我只进行keep alive

on测试。测试比较仅在apache_event和nginx之间进行比较,测试命令为:

sleep 60s

ab -k -c 1 -t 60 -n 600000 http://127.0.0.1/ && uptime

sleep 60s

ab -k -c 10 -t 60 -n 600000 http://127.0.0.1/ && uptime

sleep 60s

ab -k -c 100 -t 60 -n 600000 http://127.0.0.1/ && uptime

sleep 60s

ab -k -c 200 -t 60 -n 600000 http://127.0.0.1/ && uptime

sleep 60s

ab -k -c 500 -t 60 -n 600000 http://127.0.0.1/ && uptime

sleep 60s

ab -k -c 1000 -t 60 -n 600000 http://127.0.0.1/ && uptime

sleep 60s

ab -k -c 1500 -t 60 -n 600000 http://127.0.0.1/ && uptime

sleep用来降低系统负载,间隔以减少前后两次测试的影响;uptime 用来获得前一分钟的CPU负载,测试结果如下:

并发情况下的回复速度

a5eaa08a42dffde9474692588ff17d25.png

并发情况下相应CPU的负载

15b8cd5aa06c9dc6deb769dc186630a7.png

很奇怪,这次测试时apache的处理能力就是上不去,而且负载偏高。我发现只要在高并发的情况下(>500)apache很容易就出现reset连接的现象。为此,我不得不提高MaxKeepAliveRequests

的值(原来是100,这次设定为512),但带来的问题是CPU负载急剧升高。同时我又把KeepAliveTimeout

从15秒改为5秒。但从测试结果来看并不明显。由于对apache还不是很熟悉,有些参数的优化还得从长计议啊。nginx没得说,处理能力和负载都是那么棒,而且参数简单。

如果说nginx是青年人的话,那么apache就是中年人了。apache的瞬间爆发力还可以,但是持久性不行。nginx的体力恒定,再多干一小时,又有何妨?(不要遐想哦)

就我所接触到的情况,我觉得两者的性能差异跟设计有关,在apache的event.c的源代码中有这一样一段话:“However,

the major disadvantage is that Apache traditionally keeps an entire

child process/thread waiting for data from the client.  To

solve this problem, this MPM has a dedicated thread for handling

both the Listenting sockets, and all sockets that are in a Keep

Alive status."

虽然他说单线程处理一个客户连接已经解决了,但是从配置上来看,它还是这样的计算公式 ServerLimit

* ThreadsPerChild >=

MaxClients。我怀疑他还未很好的解决,一个线程处理一个连接和一个线程处理几千个连接,这性能差别是本质性的。还有这句话也值得回味:“The

MPM assumes the underlying apr_pollset implmentation

is somewhat threadsafe.”

所以我觉得要想获得高并发性能的web

server,就不要选apache了。他不是用来做这个的,他更多是用来做后台的应用服务器。

静态的比较做好了,那么动态语言的处理能力呢?

我分别用apache的prefork+mod_php5、worker+fcgid和event+fcgid进行比较。测试命令为:

sleep 60s

ab -k -c 1 -t 60 -n 60000 http://127.0.0.1/fcgid/test.php && uptime

sleep 60s

ab -k -c 10 -t 60 -n 60000 http://127.0.0.1/fcgid/test.php && uptime

sleep 60s

ab -k -c 100 -t 60 -n 60000 http://127.0.0.1/fcgid/test.php && uptime

sleep 60s

ab -k -c 200 -t 60 -n 60000 http://127.0.0.1/fcgid/test.php && uptime

测试结果如下:

并发情况下的回复速度

c17e402a72824234b5272117ed089896.png

并发情况下相应CPU的负载

112a27f0913a8223d4bde352443806a9.png

性能还是prefork+mod_php5最强,不过我觉得Nginx的fastcgi在性能和负载上的兼顾上做得也不赖。

测试环境:

1、测试机器:Linux yaoweibin-desktop 2.6.25.10#3 SMP Thu Jul 17 16:59:44 CST 2008 i686 GNU/Linux

Intel P4 3.0,内存512M,ubuntu 7.10,VMvare6.0.3

系统参数修改:ulimit -SHn 51200

由于环境窘迫,先拿本机回路作测试吧,最好是把测试服务器和客户机分离。

2、测试的网页源码:

静态

/p>

Transitional//EN">

Webserver test

This is a webserver test page.

动态:

Php test with phpinfo()

phpinfo();

?>

3、apache2.2.4的主要测试配置:

MaxKeepAliveRequests 512

KeepAliveTimeout 5

StartServers          5

MinSpareServers       5

MaxSpareServers      10

MaxClients          150

MaxRequestsPerChild   0

ThreadLimit         32

ServerLimit         128

StartServers         8

MaxClients          4096

ThreadsPerChild      32

ThreadLimit         256

ServerLimit         256

StartServers         8

MaxClients           10000

ThreadsPerChild     256

MaxRequestsPerChild  10000

nginx0.6.32的主要配置:

worker_processes  8;

events {

use epoll;

worker_connections  10240;

}

4、测试过程基本上每次测试完毕,将虚拟机重启一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值