【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
最近使用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同步异步测试以及应用场景总结的更多相关文章
- 蛋疼的mocha库-promise异步测试
mocha 测试库的使用 错误的处理异步测试 异步当出现断言错误的时候,他会抛出错误,但不会把这次测试当作失败,就是正确的顺利通过测试了,很无语. promise的reject会在then的第二个函数 ...
- mocha框架下,异步测试代码错误造成的问题----用例超时错误
今天用抹茶(mocha)做个测试,发现有一个测试项目总是超时: describe("DbFactory functions",function(){ it("query ...
- PHP CURL 异步测试
需求, 请求第三方接口获取数据, 单个接口0.1秒, 如果有10万个接口, 那么岂不是得1万秒才能请求完, 所以使用PHP异步测试一下, 其他的方法还有: 1.使用队列, SupserVior 开多个 ...
- js同步-异步-回调
出处:https://blog.csdn.net/u010297791/article/details/71158212(1)上面主要讲了同步和回调执行顺序的问题,接着我就举一个包含同步.异步.回调的 ...
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)
IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...
- GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调
GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents ...
- C# 同步 异步 回调 状态机 async await Demo
源码 https://gitee.com/s0611163/AsyncAwaitDemo 为什么会研究这个? 我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者 ...
- LoadRunner11脚本小技能之同步/异步接口分离+批量替换请求头
最近在公司又进行了一次LoadRunner11性能测试,技能又get了一点,继续Mark起来!!! 一.异步/同步接口分离 之前在另一篇博文中有提到"事务拆分"的小节,即一个htm ...
- nginx+gunicorn/uwsgi+python web 的前世今生
我们在部署 flask.django 等 python web 框架时,网上最多的教程就是 nginx+gunicorn/uwsgi 的部署方式,那为什么要这么部署呢,本文就来系统地解释这个问题. 必 ...
随机推荐
- Github Atom开源文本代码编辑器- 由 Github 打造的下一代编程开发利器
个人理解:Github 热度超凡的一个项目Atom,electron是整个atom的核心,对于electron可以理解成 electron =io.js + Chromium 通过 Electr ...
- Linux文件格式化与相关处理及sed工具
http://blog.csdn.net/pipisorry/article/details/52564957 geditor, sed, ed, awk, Emacs 文本处理工具 [Linux S ...
- 网站开发进阶(四十四)input type="submit" 和"button"的区别
网站开发进阶(四十四)input type="submit" 和"button"的区别 在一个页面上画一个按钮,有四种办法: 这就是一个按钮.如果你不写ja ...
- [ExtJS5学习笔记]第三十四节 sencha extjs 5 grid表格之java后台导出excel
继上次使用js前端导出excel之后,还有一个主要大家比较关注的是后台实现导出excel,因为本人开发使用的java所以这里使用apache的开源项目poi进行后台excel的导出. 本文目录 本文目 ...
- Java提升篇之反射的原理
Java提升篇之反射的原理 1.构造方法的反射 import java.lang.reflect.Constructor; public class ReflectConstructor { publ ...
- Java实现内部类
内部类是java中非常方便的一种机制,内部类所在的类称为宿主类,即内部类只能被它的宿主类使用,用这个特性,可以很好的控制类的可见性. 接下来看一个例子: package for_apro; impor ...
- 3.QT事件处理,消息过滤器
1 新建一个项目:06Event 新建cpp文件 06Event.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += wid ...
- Retrofit 2.0 超能实践(一),okHttp完美支持Https传输
http: //blog.csdn.net/sk719887916/article/details/51597816 Tamic首发 前阵子看到圈子里Retrofit 2.0,RxJava(Andro ...
- Android开发学习之路--NDK、JNI之初体验
好久没有更新博客了,最近一直在看一个仿微信项目,然后看源码并自己实现下,相信经过这个项目可以让自己了解一个项目中的代码以及种种需要注意的事项.不知不觉中博客已经快要40w访问量,而且排名也即将突破30 ...
- Salt: Master server cannot see any Minion
Issue: When you set up a Salt Master server and several Minions, you may find that none of minions c ...