美文网首页Python面试题库
Python Web服务器并发性能测试

Python Web服务器并发性能测试

作者: 林锐波 | 来源:发表于2017-11-04 15:14 被阅读664次

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次并发需要时间

1.png

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

2.png

所有测试数据

3.png

参考文章

相关文章

  • Python Web服务器并发性能测试

    Python Web服务器并发性能测试 测试条件 测试机器:四核,4GB内存 系统环境:Ubuntu 14.04 ...

  • aiohttp 并发测试web性能

    aiohttp 并发测试web性能

  • 性能测试概览Ⅳ

    五类性能测试用例 ●预期指标的性能测试 ●并发用户的性能测试 ●疲劳强度和大数据量的性能测试 ●服务器性能测试 ●...

  • Nginx Tomcat集群配置

    并发访问 对于服务器来说,大量的并发访问容易造成服务器宕机 并发访问性能测试 可以通过压力测试来检查高并发访问的性...

  • 测试笔记-1

    测试基础知识 web性能指标:并发用户数VU、每秒事物数TPS、系统响应时间、设备性能 web性能测试工具:loa...

  • 性能测试-Web

    关键词:web应用服务器 数据库服务器 性能测试

  • Redis的性能测试与基本知识

    性能测试 启动redis服务器(基于自己的配置文件启动) 使用redis自带的性能测试工具测试并发性 基础知识 R...

  • 负载均衡架构

    【摘要】 面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器...

  • 性能项目场景提取与指标分析

    一、性能测试的概述 通过并发工具请求服务器,提前发现性能问题,优化并解决。 实际工作中什么时候才需要做性能测试? ...

  • 大型网站架构系列:负载均衡详解

    摘要:面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采...

网友评论

本文标题:Python Web服务器并发性能测试

本文链接:https://www.haomeiwen.com/subject/qggfmxtx.html