Python Web服务器并发性能测试

Python Web服务器并发性能测试

测试条件

  • 测试机器:四核,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组测试数据当中的性能最好的。

每秒发送1000次并发需要时间

Python Web服务器并发性能测试_第1张图片
1.png

每秒发送1000次并发有效请求

Python Web服务器并发性能测试_第2张图片
2.png

所有测试数据

Python Web服务器并发性能测试_第3张图片
3.png

参考文章

你可能感兴趣的:(Python Web服务器并发性能测试)