• 在Centos下使用Siege对Django服务进行压力测试


    Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试。今天我们就使用Siege来对Django进行一次压力测试,看看单台Django服务到底能抗住多少的并发数。

        首先安装Siege

    wget http://download.joedog.org/siege/siege-3.0.8.tar.gz
    tar zxvf siege-3.0.8.tar.gz
    cd siege-3.0.8
    ./configure
    make
    make install
    
    验证安装结果:输入siege -V 如果输出了版本号就代表安装没问题

    Siege命令常用参数


    -c 200 指定并发数200
    -r 5 指定测试的次数5
    -f urls.txt 制定url的文件
    -i internet系统,随机发送url
    -b 请求无需等待 delay=0
    -t 5 持续测试5分钟

    测试指标说明:

    Transactions: 4 hits 完成4次处理 
    Availability: 100.00 % 成功率 
    Elapsed time: 1.19 secs 总共用时
    Data transferred: 0.03MB 共数据传输:0.03MB
    Response time: 0.13 secs 相应用时0.13秒,显示网络连接的速度
    Transaction rate: 3.36 trans/sec平均每秒完成3.36次处理,表示服务器后台处理的速度
    Throughput: 0.03MB/sec 平均每秒传送数据:0.03MB
    Concurrency: 0.45 最高并发数 0.45
    Successful transactions: 4成功处理次数
    Failed transactions: 0 失败处理次数
    Longest  transaction:0.25请求最长响应时间/每次传输所花最长时间
    Shortest  transaction:0.09请求最短响应时间/每次传输所花最短时间

    主要参考指标是 Transaction rate

    测试背景:  

    软件:python3.7.2 Django2.0.4 

    硬件 内存:1g cpu:1个1核  这个硬件配置有点惨,没办法了,因为没钱买好的

    业务场景:Django使用mysql进行普通的读操作,没有使用任何缓存

    压测命令:255个用户并发访问localhost:8000,持续时间为1分钟

    siege -c255 -t60S -v -b 127.0.0.1:8000

    首先使用runserver的起服务方式进行压测:

    python3 manage.py runserver 0.0.0.0:8000

    可以看到,这个有点凄惨,每秒后台只能处理166的请求,失败次数也有点高,更加说明了,runserver最好就是本地调试开发的时候用用就可以了,在生产环境使用runserver无异于自杀,不过在一些测试服务器上,如果懒得搭建uwsgi或者gunicorn,可以使用nohup配合runserver临时用一下。

    使用uwsgi来起服务,uwsgi作为一款高性能的服务器

    uwsgi --http :8000 --module mypro.wsgi --processes 8

    可以看到使用了uwsgi的提升还是很可观的,失败次数也减少了一半左右

        最后,我们来试一试Gunicorn

        Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, eventlet这些都支持, 在多worker最大化里用CPU的同时, 还可以使用协程来提供并发支撑, 对于网络IO密集的服务比较有利

    安装 gunicorn

    pip3 install gunicorn

    起4个worker,50个线程

    gunicorn --env DJANGO_SETTINGS_MODULE=mypro.settings mypro.wsgi:application -w 4 -b 0.0.0.0:8000 -k gthread --threads 50

    可以看到性能上和uwsgi差不太多,但是失败数比较多。以1g1核的服务器,并发阈值也就在200左右了。

        综上,单以性能论,Django的表现并非很好,但是你不能忽略它的学习成本低,简单并且容易上手的优势,鱼与熊掌不能兼得,如果要求高性能,可以试试tornado, 如果tornado依然无法满足,可以尝试使用golang,毕竟golang是以高并发著称的编译语言,而且基于它的web框架也很容易上手,性能很可观,例如Iris。

  • 相关阅读:
    港湾交换机-交换机配置
    华为交换机-SNMP配置
    H3C交换机-SNMP配置
    CISCO交换机-SNMP配置
    docker容器与宿主交互数据
    MYSQL总览
    mysql数据类型优化
    compact 创建一个包含变量名为数组的键和它们的值为数组的值的数组
    php单例模式
    完形填空格式
  • 原文地址:https://www.cnblogs.com/xcsg/p/11146841.html
Copyright © 2020-2023  润新知