`
san_yun
  • 浏览: 2652050 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

gunicorn并发测试

 
阅读更多

最近发现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



 

 

 

  • 大小: 101.9 KB
  • 大小: 109.4 KB
  • 大小: 104.4 KB
  • 大小: 100.5 KB
  • 大小: 118.2 KB
  • 大小: 120.5 KB
  • 大小: 119.5 KB
分享到:
评论
1 楼 san_yun 2012-12-24  
1 worker
ab -n 1000 http://127.0.0.1:7299/test/
|test case    |  qps  |  平均耗时(Time per request)|  总耗时(Time taken for tests)|
|单个请求   |  603.40|  1.657ms             |  1.65s   |
|100个并发  |  608.63| 164.302ms            |  1.64s   |

http_load -parallel 1 -fetches 1000 urllist
|test case |  fetches/sec |  平均耗时(msecs/first-response)|  总耗时|
|单个请求  |  609.40       |  1.647ms       | 1.647s  |
|100个并发 |  654.534      |  145.154ms     | 1.527s  |

8 worker
ab -n 1000 http://127.0.0.1:7299/test/
|test case    |  qps  |  平均耗时(Time per request)|  总耗时(Time taken for tests)|
|单个请求   |  544    |  1.83ms             |  1.83s   |
|100个并发  |  4317   |  23.16ms            |  0.23s   |


http_load -parallel 1 -fetches 1000 urllist
|test case |  fetches/sec |  平均耗时(msecs/first-response)|  总耗时|
|单个请求  |  483.187      |  1.8ms         | 2.0s   |
|100个并发 |  4287         |   20.5ms      | 0.23s  |

相关推荐

    机器学习后端部署 Nginx gunicorn flask.zip

    gunicorn能够并发地运行多个Python进程,以提高应用的处理能力。在机器学习场景中,这很重要,因为模型预测可能会消耗大量资源。gunicorn允许我们将Flask应用作为一个工作进程管理,提供负载均衡和容错能力。 然后...

    python压力测试平台后端.zip

    `locust`或`Apache JMeter`(虽然JMeter不是Python库,但有Python接口)这样的工具进行大规模并发测试。 在压力测试中,主要关注以下几个核心概念: 1. **并发用户数**:模拟多个用户同时访问服务器,测试在高并发...

    python web接口开发与测试

    Python的`gunicorn`和`uWSGI`等服务器可以提高应用的并发处理能力,`caching`策略可以减少不必要的数据库查询,从而提升接口响应速度。 综上所述,Python在Web接口开发与测试中扮演着重要角色。从框架选择、API设计...

    基于多进程中APScheduler重复运行的解决方法

    在开发中直接测试运行是没有问题的,但是用gunicorn部署以后发生了重复运行的问题: 每个任务在时间到的时刻会同时执行好几遍。 注意了一下重复的数量,恰恰是gunicorn里配置的worker进程数量,显然是每个worker进程...

    nti.geventwebsocket:GunicornGevent兼容的websocket

    2. **Gevent 兼容性**:由于 Websocket 长连接的特点,使用 Gevent 可以有效地处理多个并发连接,避免了线程或进程间切换的开销,提高了系统性能。 3. **Gunicorn 集成**:通过适配 Gunicorn 的工作模型,nti....

    自己项目后台项目保存测试.zip

    7. **部署与运维**:Python应用通常部署在WSGI服务器上,如uWSGI、Gunicorn,再通过Nginx进行反向代理和负载均衡。Docker容器化技术也可以用于简化部署流程。 8. **持续集成/持续部署(CI/CD)**:利用Jenkins、...

    django-performance-testing:通过自动化测试对Django进行性能测试!

    5. **使用Gunicorn或uWSGI作为WSGI服务器**:提高请求处理能力,与Django内置的开发服务器相比,这些服务器能更好地应对高并发场景。 **总结** "django-performance-testing"项目为Django开发者提供了一个强大的...

    Python开发-评测哪个Web框架是最快的

    1. **基准测试工具**:像`the-benchmarker-web-frameworks-281a0db`这样的项目,使用了标准的基准测试工具,如`ab`(ApacheBench)、`wrk`或`hey`,这些工具模拟大量并发请求,测量服务器响应时间和吞吐量。...

    django_and_postgresl:使用Postgres,Gunicorn和Nginx对Django进行Docker化

    在本项目"django_and_postgresl"中,我们将...通过Docker,我们可以轻松地在本地开发、测试,然后无缝地将应用部署到生产环境,确保一致性。这种结构还便于团队协作,因为每个人都可以在相同的环境中运行和调试代码。

    Python优惠券系统源码.zip

    在处理并发和性能方面,Python的Gunicorn或uWSGI服务器可以部署多个工作进程,提高服务的并发处理能力。同时,可能通过缓存技术(如Redis)来减轻数据库压力,提升响应速度,特别是在大量用户同时领取或使用优惠券时...

    python写的一个不成熟的项目 秒苗 九价 秒杀.zip

    8. **测试与优化**:单元测试、压力测试(如Locust或JMeter)是必不可少的,确保系统在高并发环境下仍能稳定运行。性能调优,包括数据库查询优化、代码优化,也是提升系统效率的关键。 9. **前端界面**:项目可能...

    python点餐后台.zip

    综上所述,Python点餐后台项目涵盖了Python Web开发的多个核心领域,包括Web框架的使用、数据库操作、API设计、用户认证、并发处理以及测试等。通过对这个项目的深入研究,开发者可以全面提升自己的Python Web开发...

    基于Python的选课管理系统.zip

    7. **并发与性能**:随着用户数量增加,系统需要处理并发请求。Python的Gunicorn或uWSGI可以作为WSGI服务器,提高系统性能。还可以使用线程、进程或异步IO来优化处理速度。 8. **错误处理与日志记录**:为了保证...

    基于python实现黑白棋游戏后端-源码

    8. **部署与运维**:最后,将游戏后端部署到服务器,可以选择使用`gunicorn`或`uWSGI`作为应用服务器,搭配`Nginx`作为反向代理和负载均衡。监控和日志管理也是运维的重要部分,可以使用`logging`库和第三方工具如`...

    stone_api:这是一个API,用于分析使用Falcon,Pandas,Gunicorn,CSV和JSON库使用Python生产的Stone终端的情况。 该API是公司所面临挑战的一部分

    6. **测试与调试**:为了保证stone_api的质量和稳定性,开发者可能会使用单元测试、集成测试和端到端测试工具,如pytest或unittest,对API的功能进行验证。同时,日志记录和错误处理也是不可或缺的部分,以追踪和...

    基于python实现的学生选课系统.zip

    综上所述,基于Python实现的学生选课系统涉及到了Web开发的多个方面,包括后端编程、数据库设计、前端界面构建、用户认证、并发处理、测试以及部署运维。通过学习和实践这样的项目,开发者可以全面掌握Web应用开发...

    golang写的推技术聊天室

    如果需要更高的并发性能和负载均衡,可以考虑使用Gunicorn或者Kubernetes等工具进行部署和扩展。 总的来说,Golang写的推技术聊天室是一个很好的实践项目,可以帮助开发者深入理解Golang的并发特性、WebSocket通信...

    online_store:使测试在线商店

    Python的gunicorn和uWSGI服务器可以处理大量并发请求,而Redis或Memcached可以作为高速缓存,减轻数据库压力。 最后,持续集成/持续部署(CI/CD)是现代化开发流程的重要组成部分。我们可以利用Jenkins、Travis CI...

    efficient-tester-project

    在测试环境中,Gunicorn可以模拟生产环境,帮助我们检查应用程序在高并发情况下的表现,评估其性能和稳定性。 MongoDB是一个流行的NoSQL数据库,它的灵活性和高性能使其在大数据处理和非结构化数据存储中得到广泛...

Global site tag (gtag.js) - Google Analytics