最近使用uwsgi出了一些问题,于是测试下Gunicorn测试对比下

环境

  • 一颗cpu 1g内存 Centos系统 Django作为后端应用,Gunicorn默认模式和异步模式,响应基本是无阻塞类型
  • 测试的request是一个加密操作,对url中的几个参数做一个ase加密
  • 说明:下面的模拟阻塞模式,类似于你的请求中有很多调用第三方api的场景,因为网络延迟导致响应比较长

测试命令

ab -n 10000 -c 100 -r 'http://127.0.0.1:8888/account/ulogin/3/?wlanuserip=127.0.0.1&wlanacname=&ssid=cmcc&wlanparameter=ffffffffffff'
#模拟阻塞的模式下 -n 1000
ab -n 1000 -c 100 -r 'http://127.0.0.1:8888/account/ulogin/3/?wlanuserip=127.0.0.1&wlanacname=&ssid=cmcc&wlanparameter=ffffffffffff'

Gunicorn 同步异步测试

应用启动参数

默认模式
gunicorn -b 0.0.0.0:8888 wsgi:application

异步模式
gunicorn -b 0.0.0.0:8888 -k 'gevent' wsgi:application

测试统计

数字含义:总时间 qps 错误数

请求处理无阻塞:

默认模式worker: 27.5s,364,0; 26.3s,261,0

异步模式worker:31.9s,312,0; 31s,314,0

每个请求增加0.1秒的阻塞之后:

默认模式: 已经下降到 不到10的qps

异步模式: 仍然可以和之前的速度相当 300qps左右

Gunicorn设计 对使用同步还是异步worker,使用多少worker都有详细的建议

uWSGI同步异步测试

应用启动参数

#同步模式
uwsgi --http :8888 --module wsgi --process 1 -l 1000

#异步模式
uwsgi --http :8888 --module wsgi -l 1000 --async 100 --ugreen  #原始的阻塞没有什么提升

测试统计

数字含义:总时间,qps,错误

一般请求:

默认模式: 26s, 385,0;26.2s, 380, 0

异步模式: 26.8s, 373, 0; 25.9s, 385, 0

每个请求0.1s阻塞请求下:

默认模式:109s,9,0; 103s,9.6,0

异步模式:104s, 9.6,0; 106s, 9.2,0 #基本跟同步模式没啥区别

uWSGI文档async说明 开头给出了一个警告:如果你的app不是时间驱动的话,使用这种模式是不对的。说白了,uwsgi的事件模式其实对应的是后端的事件框架,例如用gevent选项,后端是gevent才有效,如果后端是django,其实怎么配置没有多大区别,并没有对django的wsgi做了异步操作。

总结

在响应时间较短的应用中,uWSGI+django是个不错的组合(测试的结果来看有稍微那么一点优势),但是如果有部分阻塞请求 Gunicorn+gevent+django有非常好的效率, 如果阻塞请求比较多的话,还是用tornado重写吧。

【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结的更多相关文章

  1. 蛋疼的mocha库-promise异步测试

    mocha 测试库的使用 错误的处理异步测试 异步当出现断言错误的时候,他会抛出错误,但不会把这次测试当作失败,就是正确的顺利通过测试了,很无语. promise的reject会在then的第二个函数 ...

  2. mocha框架下,异步测试代码错误造成的问题----用例超时错误

    今天用抹茶(mocha)做个测试,发现有一个测试项目总是超时: describe("DbFactory functions",function(){ it("query ...

  3. PHP CURL 异步测试

    需求, 请求第三方接口获取数据, 单个接口0.1秒, 如果有10万个接口, 那么岂不是得1万秒才能请求完, 所以使用PHP异步测试一下, 其他的方法还有: 1.使用队列, SupserVior 开多个 ...

  4. js同步-异步-回调

    出处:https://blog.csdn.net/u010297791/article/details/71158212(1)上面主要讲了同步和回调执行顺序的问题,接着我就举一个包含同步.异步.回调的 ...

  5. linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)

      IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...

  6. GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调

    GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents ...

  7. C# 同步 异步 回调 状态机 async await Demo

    源码 https://gitee.com/s0611163/AsyncAwaitDemo 为什么会研究这个? 我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者 ...

  8. LoadRunner11脚本小技能之同步/异步接口分离+批量替换请求头

    最近在公司又进行了一次LoadRunner11性能测试,技能又get了一点,继续Mark起来!!! 一.异步/同步接口分离 之前在另一篇博文中有提到"事务拆分"的小节,即一个htm ...

  9. nginx+gunicorn/uwsgi+python web 的前世今生

    我们在部署 flask.django 等 python web 框架时,网上最多的教程就是 nginx+gunicorn/uwsgi 的部署方式,那为什么要这么部署呢,本文就来系统地解释这个问题. 必 ...

随机推荐

  1. MacOS下Rails+Nginx+SSL环境的搭建(上)

    这里把主要的步骤写下来,反正我是走了不少弯路,希望由此需求的朋友们别再走类似的弯路.虽说环境是在MacOS下搭建,但是基本上和linux下的很相像,大家可以举一反三. 一.安装Rails 这个是最简单 ...

  2. APP自动化框架LazyAndroid使用手册(2)--元素自动抓取

    作者:黄书力 概述 前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法. ...

  3. Linux 性能监测:Memory

    这里的讲到的 "内存" 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为 ...

  4. android MultiDex multidex原理原理下遇见的N个深坑(二)

    android MultiDex 原理下遇见的N个深坑(二) 这是在一个论坛看到的问题,其实你不知道MultiDex到底有多坑. 不了解的可以先看上篇文章:android MultiDex multi ...

  5. solr界面

    1.1 界面功能介绍 1.1.1 Analysis

  6. Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)

    csdn :码小白 原文地址: http://blog.csdn.net/sk719887916/article/details/51958010 RetrofitClient 基于Retrofit2 ...

  7. cassandra 如何写数据以及放置副本

    application发送数据到server application 发送请求到server 根据设置的load balance 规则从cluster中挑选一个coordinator,一般使用轮询即可 ...

  8. was unable to start within 45 seconds. If the server requires more time, try increasing the timeout

    在eclipse启动tomcat时遇到超时45秒的问题: Server Tomcat v7.0 Server at localhost was unable to startwithin 45 sec ...

  9. USB OTG原理+ ID 检测原理

    OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...

  10. Android项目-高考作文项目架构(二)

    1, 普通的http json请求 请看下面架构草图: 这样就抽象出了其他Activity可能需要的Http Json请求的功能. 只要其他Activity有Http Json请求的需求都可以继承Ba ...