首页 存档 技术 查看内容

Python Web服务器并发性能测试

2018-3-30 13:00 |来自: 互联网 350 0

摘要: 测试机器:四核,4GB内存 系统环境:Ubuntu 14.04 LTS 测试环境:django 测试工具:apache ab 测试参数:1000个并发 1000~10000个请求   测试效果:   django   毫无疑问,用原生django的server做处理的表现 ...


  • 测试机器:四核,4GB内存

  • 系统环境:Ubuntu 14.04 LTS

  • 测试环境:django

  • 测试工具:apache ab

  • 测试参数:1000个并发 1000~10000个请求

  测试效果:

  django

  毫无疑问,用原生django的server做处理的表现是最烂的,在10000次请求的情况下brokenpipe的几率极高,只有1400次请求被处理,成功率只有14%,我也懒得继续测下去了。

  django nginx

  这次搭上了nginx做反向代理,也使的脆弱的django服务器的情况有所缓解,但成功率仍然不高(10000次请求中有3684个请求被处理)。

  uwsgi nginx

  uwsgi是性能极高的一个由C编写的服务器,它使用uwsgi协议,这次让它配合nginx处理django的request,参数为4进程 2线程,性能立即直线上升,处理请求的成功率也基本在90%左右,不过我在测试时遇到了一个坑,就是uwsgi在处理请求的时候发送了队列溢出的问题,因为当前测试设置的并发数为每秒1000次并发,而uwsgi的处理队列容量默认为100,导致处理请求的时间加长,而这个问题则可以通过修改somaxcon的大小解决,总的来说,使用uwsgi nginx是一个理想的选择。

  gunicorn nginx

  gunicorn跟uwsgi类似,也是一个高性能的http服务器,它由ruby的unicorn项目移植,是由python编写的,它的配置简单,而且可以灵活地搭配其他网络库,部署十分方便,在测试数据中可以看到,用这种配置运行django能在短时间内就能处理大量的并发请求,成功率在90%左右。

  gunicorn nginx gevent

  前面说的几种环境,看似不错,但我们需要追求完美!由于gunicorn是同步(sync)单线程模型的,有的时候它不免会发生一些阻塞问题,这时候我们为gunicorn加上-k gevent参数来用gevent做处理接口,这就比较靠谱地处理了阻塞问题,从数据中可以看到,gunicorn nginx gevent的模式不仅拥有100%的处理成功率,而且时间也在很短之内完成,是5组测试数据当中的性能最好的。

  所有测试数据:

推荐阅读

点击阅读 声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部