在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。
在Centos下使用Siege对Django服务进行压力测试的更多相关文章
- 在Centos7.3下使用Siege对Django服务进行压力测试
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_87 Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续 ...
- centos下安装ngnix+php+mysql服务
一.nginx 安装 1.查看yum下nginx版本信息 [root@localhost ~]# yum list | grep nginx 2.手动添加nginx的yum仓库 [root@local ...
- mac下 JMeter 4.0 进行多用户接口压力测试
1.最近在做公司的内部系统,需要进行多用户压力测试,于是上网在官网下载了Jmeter 压缩包,并放在指定的目录解压,打开解压后文件夹到bin目录下: 执行sh jmeter Jmeter就启动起来了 ...
- Centos下使用gitosis配置管理git服务端(转载)
From:http://www.cnblogs.com/ahauzyy/archive/2013/04/08/3043384.html 说明:由于条件有限,我这里使用的是同一台centos的,但教程内 ...
- CentOS下宝塔如何部署Django项目?
基础环境 装好宝塔服务 宝塔里装好[Python项目管理器] 宝塔里装好[Nginx] 把Django项目代码发到服务器 把代码放到服务器上有两种方法: 方法一:服务器上安装Git,通过Git Clo ...
- centos下运行python3.6+Django+mysql项目
文件准备: Django项目 myslq安装 关闭防火墙 用xshell拖拽到centos上 安装文件: 安装python3.6(3.7有问题) sh install_py36.sh 关闭防火墙 sh ...
- ubuntu下配置Apache+mod_wsgi+Django项目(个人测试)
经过了一个星期的摸索,查找资料以及实验,我搭建的环境基本能用(还有就是Django后台的静态文件加载的问题) 这里面只是介绍一下我的过程,因为对应Apache还不是很熟练,特别是配置文件.只能供大家参 ...
- thrift协议的服务进压力测试
Thrift vs Grpc内容如下链接 http://blog.csdn.net/dazheng/article/details/48830511 背景:Facebook 开发的远程服务调用框架 ...
- 在Centos下对高并发web框架Tornado的性能进行测试
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_89 在之前的一篇文章中,我们在1g1核的惨淡硬件环境下,对 uwsgi + django 和 gunicorn+ django 的 ...
随机推荐
- 【海思】Hi3531A SPI功能的详细配置以及使用
目录 一.前言 二.SPI管脚信息获取 2.1 SPI_SCLK.SPI_SDI.SPI_SDO管脚复用寄存器 2.2 片选SPI_CSN0-SPI_CSN3管脚寄存器 三.配置和使能与SPI相关的管 ...
- Problem D. Country Meow 题解(三分套三分套三分)
题目链接 题目大意 给你n(n<=100)个点,要你找一个点使得和所有点距离的最大值最小值ans 题目思路 一直在想二分答案,但是不会check 这个时候就要换一下思想 三分套三分套三分坐标即可 ...
- mysql反序索引
关于mysql的排序 参考:https://www.cnblogs.com/lccsblog/p/12733773.html 转载: https://www.cnblogs.com/lynn919/p ...
- 万字长文深度剖析面向对象的javascript
目录 简介 什么是对象 构造函数 构造函数的特点 new命令的原理 prototype对象 Object的prototype操作 Object.getPrototypeOf Object.setPro ...
- iOS UIImageView contentMode使用详解
UIImageView 的contentMode这个属性是用来设置图片的显示方式,如居中.居右,是否缩放等,有以下几个常量可供设定:UIViewContentModeScaleToFill //填满i ...
- 网络拓扑实例09:VRRP组网下同网段内配置基于全局地址池的DHCP服务器
组网图形 DHCP服务器简介 见前面DHCP服务器文章,不再赘述. 组网需求 如图1所示,某企业内的一台主机通过Switch双归属到SwitchA和SwitchB,SwitchA为主设备,作为DHCP ...
- JZOJ2020年8月13日提高组反思
JZOJ2020年8月13日提高组反思 T1 打了3h+,然后自己的小数据都没过 果断选择交对拍的暴力 下次还是注意时间吧 T2 一下三题都没时间打了 看了题目觉得特别烦人(有式子) 再看发现式子类似 ...
- moviepy音视频剪辑:使用fl_time进行时间特效处理报错ValueError: Attribute duration not set
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在使 ...
- PyQt(Python+Qt)学习随笔:QHeaderView.ResizeMode取值及含义
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 关于ResizeMode的使用请参考<PyQt(Python+Qt)学习随笔:QTableWi ...
- vue中两行代码实现全选及子选项全部选中,则全选按钮选中,反之有一个没选中,就取消选中全选按钮
every() 方法使用指定函数检测数组中的所有元素: 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测. 如果所有元素都满足条件,则返回 true. 逻辑 ...