闲的没事,拿一台淘汰的2950做了做nginx和lighttpd的性能对比,可以在选择webserver上做个参考。
测试环境如下
Dell2950 4G内存,FreeBSD 8.2 release
#sysctl -a | grep CPU
hw.model: Intel(R) Xeon(R) CPU 5130 @ 2.00GHz 2x2颗 内存4G #uname -a FreeBSD localhost.localdomain 8.2-RELEASE
php5.2.17,fastcgi方式,默认5进程测试,失败请求太多,改用20进程,无请求失败。
Nginx主要配置
events {
use kqueue;
worker_connections 102400;
}
写了个phpinfo用ab测试,内网IP,不考虑带宽因素。
# ab -n 100000 -c 1000 http://192.168.100.28/info.php
This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.100.28 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Finished 100000 requests Server Software: nginx/1.0.0 Server Hostname: 192.168.100.28 Server Port: 80 Document Path: /info.php Document Length: 49457 bytes Concurrency Level: 1000 Time taken for tests: 86.578 seconds Complete requests: 100000 Failed requests: 0 Broken pipe errors: 0 Total transferred: 4977355920 bytes HTML transferred: 4961202790 bytes Requests per second: 1155.03 [#/sec] (mean) Time per request: 865.78 [ms] (mean) Time per request: 0.87 [ms] (mean, across all concurrent requests) Transfer rate: 57489.84 [Kbytes/sec] received Connnection Times (ms) min mean[+/-sd] median max Connect: 0 297 888.8 11 6414 Processing: 20 555 649.9 421 9989 Waiting: 18 555 649.9 421 9988 Total: 20 852 1065.3 473 10222 Percentage of the requests served within a certain time (ms) 50% 473 66% 584 75% 699 80% 776 90% 3308 95% 3473 98% 3688 99% 3817 100% 10222 (last request)
iostat -w 1
tty mfid0 da0 cd0 cpu
tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id
0 23 19.12 1 0.01 0.01 0 0.00 0.00 0 0.00 0 0 0 0 100
0 235 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0 100
0 79 2.00 3 0.01 0.00 0 0.00 0.00 0 0.00 0 0 0 0 100
4 393 2.00 2 0.00 0.00 0 0.00 0.00 0 0.00 10 0 4 2 85
0 78 123.85 54 6.52 0.00 0 0.00 0.00 0 0.00 76 0 17 7 0
0 76 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 72 0 16 8 5
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 81 0 12 5 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 74 0 15 7 3
0 79 16.95 19 0.31 0.00 0 0.00 0.00 0 0.00 71 0 19 8 2
0 78 21.60 10 0.21 0.00 0 0.00 0.00 0 0.00 74 0 17 7 2
0 78 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 74 0 17 8 1
0 78 53.33 3 0.16 0.00 0 0.00 0.00 0 0.00 68 0 21 10 1
0 104 20.20 20 0.39 0.00 0 0.00 0.00 0 0.00 68 0 18 10 5
------------------------------------------------换lighttpd
server.max-fds = 8192
##
## Stat() call caching.
##
## lighttpd can utilize FAM/Gamin to cache stat call.
##
## possible values are:
## disable, simple or fam.
##
server.stat-cache-engine = "simple"
##
## Fine tuning for the request handling
##
## max-connections == max-fds/2 (maybe /3)
## means the other file handles are used for fastcgi/files
##
Server.max-connections = 4096
也是使用kqueue队列
# ab -n 100000 -c 1000 http://192.168.100.28/info.php
This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.100.28 (be patient) Completed 10000 requests Completed 20000 requests Completed 30000 requests Completed 40000 requests Completed 50000 requests Completed 60000 requests Completed 70000 requests Completed 80000 requests Completed 90000 requests Finished 100000 requests Server Software: lighttpd/1.4.28 Server Hostname: 192.168.100.28 Server Port: 80 Document Path: /info.php Document Length: 49127 bytes Concurrency Level: 1000 Time taken for tests: 83.107 seconds Complete requests: 100000 Failed requests: 0 Broken pipe errors: 0 Total transferred: 4932575365 bytes HTML transferred: 4915304142 bytes Requests per second: 1203.27 [#/sec] (mean) Time per request: 831.07 [ms] (mean) Time per request: 0.83 [ms] (mean, across all concurrent requests) Transfer rate: 59352.10 [Kbytes/sec] received Connnection Times (ms) min mean[+/-sd] median max Connect: 0 19 206.2 1 3113 Processing: 79 807 155.8 823 3891 Waiting: 66 807 155.8 823 3890 Total: 79 826 251.0 826 4248 Percentage of the requests served within a certain time (ms) 50% 826 66% 843 75% 854 80% 862 90% 894 95% 939 98% 1006 99% 1094 100% 4248 (last request)
# iostat -w 1
tty mfid0 da0 cd0 cpu
tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id
0 23 19.25 1 0.01 0.01 0 0.00 0.00 0 0.00 0 0 0 0 100
0 387 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0 99
0 78 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0 0 0 0 100
4 2185 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 47 0 14 7 33
0 78 120.00 2 0.23 0.00 0 0.00 0.00 0 0.00 68 0 23 9 1
0 2405 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 77 0 14 6 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 71 0 17 10 2
0 1852 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 72 0 18 8 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 62 0 22 7 10
0 1143 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 68 0 20 9 3
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 65 0 25 8 2
0 2074 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 69 0 22 8 2
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 65 0 23 10 3
0 1917 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 62 0 26 10 3
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 63 0 25 8 5
0 2247 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 66 0 23 8 3
0 79 128.00 1 0.12 0.00 0 0.00 0.00 0 0.00 66 0 25 7 2
0 1373 48.00 7 0.33 0.00 0 0.00 0.00 0 0.00 66 0 22 8 4
看起来,lighttpd在磁盘上并没有nginx那样的瞬间压力。
总结:
一开始的失败请求主要来自php-cgi,在此服务器上,默认进程数无法处理大并发访问量。改为20以上就不存在失败了,再高收益不大。从高负载动态页面吞吐率上说,lighttpd可能要稍稍高于nginx。
附ab静态页面吞吐率
lighttpd Requests per second: 9045.68 [#/sec] (mean)
nginx Requests per second: 11622.50 [#/sec] (mean)
处理静态页面上,nginx要比lighttpd快不少。如果去掉ab对cpu的压力,两款软件加php对cpu的压力应该不超过70%。
在处理诸如php,ror等应用方面的极端压榨,可以考虑使用lighttpd。处理静态页面可以考虑使用nginx。篇幅有限,vmstat和truss跟踪的结果就不贴了。
本文出自 “实践检验真理” 博客,请务必保留此出处http://slaytanic.blog.51cto.com/2057708/554880 (责任编辑:IT) |