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

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

    首先安装Siegemysql

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命令经常使用参数linux


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

 

测试指标说明:web

 

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请求最短响应时间/每次传输所花最短期sql

主要参考指标是 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。

相关文章
相关标签/搜索