在Centos下使用Siege对Django服务进行压力测试(Stress Testing)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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 transaction0.25请求最长响应时间/每次传输所花最长时间
Shortest transaction0.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作为一款高性能的服务器安装方式请见https://v3u.cn/a_id_72起8个worker

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。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: gocentos