- 测试局限性:
虚拟机 测试浮动较大
接口没有做任何操作直接返回
- 服务器:
Ubuntu 14.04.5 LTS
单核 1G
- flask
from flask import Flask
app = Flask(__name__)
@app.route("/api/active")
def active():
"""
"""
return "active"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug = False)
ab -n 2000 -c 130 http://192.168.1.221:5000/api/active
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 192.168.1.221 (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests
Server Software: Werkzeug/0.14.1
Server Hostname: 192.168.1.221
Server Port: 5000
Document Path: /api/active
Document Length: 6 bytes
Concurrency Level: 130
Time taken for tests: 50.288 seconds
Complete requests: 20000
Failed requests: 0
Total transferred: 3180000 bytes
HTML transferred: 120000 bytes
Requests per second: 397.71 [#/sec] (mean)
Time per request: 326.874 [ms] (mean)
Time per request: 2.514 [ms] (mean, across all concurrent requests)
Transfer rate: 61.75 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.9 1 23
Processing: 9 325 29.2 322 641
Waiting: 9 324 29.2 322 641
Total: 15 326 29.1 323 664
Percentage of the requests served within a certain time (ms)
50% 323
66% 328
75% 334
80% 340
90% 349
95% 361
98% 381
99% 407
100% 664 (longest request)
- django
ab -n 2000 -c 35 http://192.168.1.221:5001/api/active/
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 192.168.1.221 (be patient)
Completed 200 requests
Completed 400 requests
Completed 600 requests
Completed 800 requests
Completed 1000 requests
Completed 1200 requests
Completed 1400 requests
Completed 1600 requests
Completed 1800 requests
Completed 2000 requests
Finished 2000 requests
Server Software: WSGIServer/0.2
Server Hostname: 192.168.1.221
Server Port: 5001
Document Path: /api/active/
Document Length: 44 bytes
Concurrency Level: 35
Time taken for tests: 15.801 seconds
Complete requests: 2000
Failed requests: 0
Total transferred: 998000 bytes
HTML transferred: 88000 bytes
Requests per second: 126.57 [#/sec] (mean)
Time per request: 276.517 [ms] (mean)
Time per request: 7.901 [ms] (mean, across all concurrent requests)
Transfer rate: 61.68 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 120 480.8 1 7013
Processing: 18 131 178.0 96 3329
Waiting: 7 124 177.5 88 3321
Total: 19 251 531.1 99 7124
Percentage of the requests served within a certain time (ms)
50% 99
66% 112
75% 126
80% 137
90% 332
95% 1103
98% 2631
99% 3102
100% 7124 (longest request)
- tonado
# coding:utf-8
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options # 新导入的options模块
tornado.options.define("port", default=5002, type=int, help="run server on the given port.") # 定义服务器监听端口选项
class IndexHandler(tornado.web.RequestHandler):
"""主路由处理类"""
def get(self):
"""对应http的get请求方式"""
self.write("active")
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application([
(r"/api/active", IndexHandler),
])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(tornado.options.options.port, address="0.0.0.0")
tornado.ioloop.IOLoop.current().start()
ab -n 4000 -c 1150 http://192.168.1.221:5002/api/active
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 192.168.1.221 (be patient)
Completed 400 requests
Completed 800 requests
Completed 1200 requests
Completed 1600 requests
Completed 2000 requests
Completed 2400 requests
Completed 2800 requests
Completed 3200 requests
Completed 3600 requests
Completed 4000 requests
Finished 4000 requests
Server Software: TornadoServer/6.0.3
Server Hostname: 192.168.1.221
Server Port: 5002
Document Path: /api/active
Document Length: 6 bytes
Concurrency Level: 1150
Time taken for tests: 12.409 seconds
Complete requests: 4000
Failed requests: 0
Total transferred: 800000 bytes
HTML transferred: 24000 bytes
Requests per second: 322.35 [#/sec] (mean)
Time per request: 3567.512 [ms] (mean)
Time per request: 3.102 [ms] (mean, across all concurrent requests)
Transfer rate: 62.96 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1107 1798.2 47 7019
Processing: 236 636 169.5 613 1144
Waiting: 236 636 169.4 613 1144
Total: 285 1743 1857.2 888 8123
Percentage of the requests served within a certain time (ms)
50% 888
66% 1560
75% 1656
80% 1818
90% 3728
95% 7720
98% 7997
99% 8061
100% 8123 (longest request)
- aiohttp
from aiohttp import web
async def handle(request):
return web.Response(text="active")
app = web.Application()
app.add_routes([web.get('/api/active', handle),
])
web.run_app(app)
ab -n 4000 -c 1150 http://192.168.1.221:8080/api/active
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 192.168.1.221 (be patient)
Completed 400 requests
Completed 800 requests
Completed 1200 requests
Completed 1600 requests
Completed 2000 requests
Completed 2400 requests
Completed 2800 requests
Completed 3200 requests
Completed 3600 requests
Completed 4000 requests
Finished 4000 requests
Server Software: Python/3.6
Server Hostname: 192.168.1.221
Server Port: 8080
Document Path: /api/active
Document Length: 6 bytes
Concurrency Level: 1150
Time taken for tests: 8.754 seconds
Complete requests: 4000
Failed requests: 0
Total transferred: 624000 bytes
HTML transferred: 24000 bytes
Requests per second: 456.96 [#/sec] (mean)
Time per request: 2516.637 [ms] (mean)
Time per request: 2.188 [ms] (mean, across all concurrent requests)
Transfer rate: 69.61 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 414 1142.4 1 7018
Processing: 275 777 387.8 677 1882
Waiting: 170 672 368.8 574 1803
Total: 304 1192 1281.2 678 7822
Percentage of the requests served within a certain time (ms)
50% 678
66% 757
75% 903
80% 1856
90% 2832
95% 3718
98% 4373
99% 7811
100% 7822 (longest request)
- uwsgi
/etc/sysctl.conf
net.core.somaxconn = 65535
ab -n 14000 -c 6000 http://192.168.1.221:9090/
# uwsgi --http :9090 --wsgi-file uwsig_test.py --listen 2048
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
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 192.168.1.221 (be patient)
Completed 1400 requests
Completed 2800 requests
Completed 4200 requests
Completed 5600 requests
Completed 7000 requests
Completed 8400 requests
Completed 9800 requests
Completed 11200 requests
Completed 12600 requests
Completed 14000 requests
Finished 14000 requests
Server Software:
Server Hostname: 192.168.1.221
Server Port: 9090
Document Path: /
Document Length: 11 bytes
Concurrency Level: 6000
Time taken for tests: 16.313 seconds
Complete requests: 14000
Failed requests: 0
Total transferred: 770000 bytes
HTML transferred: 154000 bytes
Requests per second: 858.19 [#/sec] (mean)
Time per request: 6991.470 [ms] (mean)
Time per request: 1.165 [ms] (mean, across all concurrent requests)
Transfer rate: 46.09 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 558 1295.1 69 7022
Processing: 178 4492 4528.2 2357 14287
Waiting: 165 4490 4528.6 2355 14286
Total: 370 5050 4933.3 2395 16034
Percentage of the requests served within a certain time (ms)
50% 2395
66% 3119
75% 5585
80% 12040
90% 14289
95% 14890
98% 15834
99% 15958
100% 16034 (longest request)
-
并发:
uwsgi 6000 >> aiohttp 1150 == tornado 1150 >> flask 130 >> django 35 -
qps
uwsgi 858 >> aiohttp 456 >> tornado 322 == flask 397 >> django 126
todo go node …