最近发现web服务器的压力越来越大,想测试一下gunicorn的并发能力如何。
我测试了网站最简单的about页面,首先不考虑并发的情况,对这个页面本身进行测试,平均响应时间20ms。
单个并发 qps =50 (1000ms/20ms)
10个并发 qps =400
20个并发 qps =500~550
30个并发 qps =500~550
说明gu的并发能力只有10左右(我怀疑等于cpu核数),再往上增加并发,平均耗时也随之增加,QPS没有提高。
下面是详细测试过程:
测试环境
gunicorn 0.14.6
gevent 0.13.8
python: 2.7.2
cpu: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 16个cpu
内存 16g
一.测试最简单的django框架页面
测试代码:
views.py:
from django.shortcuts import render_to_response from django.template.context import RequestContext import threading from datetime import datetime def test(request): return render_to_response("index.html", {"result":"this text is build by python,now is %s"%(datetime.now())},context_instance=RequestContext(request))
template:
hello {{result}}
测试结果:
单个平均响应时间:2ms
单个并发: 500qps
10个并发: 4000qps
50个并发: 5000qps
二.测试纯gunicorn
myapp.py
from datetime import datetime def app(environ, start_response): data = "this text is build by python,now is %s"%(datetime.now()) start_response("200 OK", [ ("Content-Type", "text/plain"), ("Content-Length", str(len(data))) ]) return iter([data])
gunicorn -w 12 -k gevent myapp:app -b 127.0.0.1:8181
测试结果:
单个平均响应时间:0.5ms
单个并发: 1800 qps
10个并发: 10494 qps
50个并发: 11218 qps
三.测试detail页面
ab -n100 http://127.0.0.1:7299/people/mblog/46320325/detail/
测试结果:
单个平均响应时间:228ms
单个并发: 4.37 qps
10个并发: 38 qps
50个并发: 46.67 qps