轻量级web server Tornado代码分析(http://blog.csdn.net/goldlevi/article/details/7047726)
测试环境
环境
CPU:core i3
操作系统:Ubuntu 14.0
Python框架:py2.7
Web服务器:Tornado 4.2.0,服务器只启用一核心
内容
使用同步和异步的方式来写一段延时代码,然后再使用 apachebench进行压力测试:
并发量 40
总请求量 200
由于本文只是做性能对比,而不是性能的上限对比,所以都使用的是比较少的压力。
同步和异步代码
class SyncSleepHandler(RequestHandler):
"""
同步的方式,一个延时1s的接口
"""
def get(self):
time.sleep(1)
self.write("when i sleep 5s")
class SleepHandler(RequestHandler):
"""
异步的延时1秒的接口
"""
@tornado.gen.coroutine
def get(self):
yield tornado.gen.Task(
tornado.ioloop.IOLoop.instance().add_timeout,
time.time() + 1
)
self.write("when i sleep 5s")
同步测试结果
➜ / ab -n 200 -c 40 http://localhost:8009/demo/syncsleep-handler/
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
Server Software: TornadoServer/4.2.1
Server Hostname: localhost
Server Port: 8009
Document Path: /demo/syncsleep-handler/
Document Length: 15 bytes
Concurrency Level: 40
Time taken for tests: 200.746 seconds
Complete requests: 200
Failed requests: 0
Total transferred: 42000 bytes
HTML transferred: 3000 bytes
Requests per second: 1.00 [#/sec] (mean)
Time per request: 40149.159 [ms] (mean)
Time per request: 1003.729 [ms] (mean, across all concurrent requests)
Transfer rate: 0.20 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 1
Processing: 1005 36235 18692.2 38133 200745
Waiting: 1005 36234 18692.2 38133 200745
Total: 1006 36235 18692.2 38133 200746
Percentage of the requests served within a certain time (ms)
50% 38133
66% 38137
75% 38142
80% 38161
90% 38171
95% 38176
98% 38179
99% 199742
100% 200746 (longest request)
异步测试结果
➜ / ab -n 200 -c 40 http://localhost:8009/demo/sleep-handler/
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
Server Software: TornadoServer/4.2.1
Server Hostname: localhost
Server Port: 8009
Document Path: /demo/sleep-handler/
Document Length: 15 bytes
Concurrency Level: 40
Time taken for tests: 5.083 seconds
Complete requests: 200
Failed requests: 0
Total transferred: 42000 bytes
HTML transferred: 3000 bytes
Requests per second: 39.35 [#/sec] (mean)
Time per request: 1016.611 [ms] (mean)
Time per request: 25.415 [ms] (mean, across all concurrent requests)
Transfer rate: 8.07 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 2
Processing: 1001 1010 12.0 1005 1053
Waiting: 1001 1010 12.0 1005 1053
Total: 1001 1010 12.3 1005 1055
Percentage of the requests served within a certain time (ms)
50% 1005
66% 1009
75% 1011
80% 1015
90% 1032
95% 1044
98% 1045
99% 1054
100% 1055 (longest request)