压力测试
-
-
ab (apache benchmark)
-
siege
-
wrk
-
locust
-
1.使用ab(apache benchmark) 进行压力测试
1.安装
sudo apt install apache2-utils
2.运行项目
python manage.py runserver
线上要把debug模式关掉:Debug=False
在终端中发起请求:curl http://127.0.0.1:8000/
带cookie登录发请求(有些接口需要登录):

3.压力测试:ab -n 100 -c 5 http://127.0.0.1:8000/
-n表示总的请求数,-c表示并发量
带cookie压力测试:

4.ab -k -n 10000 -c 5000 http://127.0.0.1:9000/
加上-k 表示客户端keepalive保持连接
HTTP 是建立在 TCP 之上的短连接协议,通信一次以后就会断开,频繁访问时会反复的进行三次握手和四次挥手,性能较差
KeepAlive: 从 HTTP 1.1 开始提供功能,能够重复利用 HTTP 建立好的连接,可以避免反复的进行三次握手和四次挥手的过程,提升性能
netstat -nat | grep 9000 查看9000端口Tcp网络连接
因为django自带的runserver性能不好,只适合代码开发调试,下面使用gunicorn代替runserver进行启动项目,然后再使用ab进行压力测试
2.gunicorn(是多进程+协程的工作模式)
1.安装
pip install gunicorn gevent
2.gunicorn运行项目
gunicorn -c swiper/gconfig.py swiper.wsgi
在项目路径下运行,-c代表gunicorn的配置文件(swiper/gconfig.py),swiper.wsgi表示项目的wsgi文件
报错socket:Too many open files 是文件描述符的限制
ulimit -n 命令为查看文件描述符数量,为当前程序能操作文件的最大数量
更改文件描述符数量:ulimit -n 65535 表示改为65535
更改最大连接数的配置:在/etc/sysctl.conf文件最后加上net.core.somaxconn=65535,最后命令sudo sysctl -p使更改生效
sudo sysctl -a 操作系统内核参数
sudo sysctl -a | grep conn 查看网络最大连接数
重启gunicorn: 先kill gunicorn的pid,在pidfile = 'logs/gunicorn.pid'文件中查看pid,然后gunicorn -c swiper/gconfig.py swiper.wsgi
总结:
1.使用gunicorn运行项目
2.更改文件描述符数量
3.更改最大连接数的配置
4.压力测试时加上参数-k,
这几点都可以让服务器性能有很大提升,压力测试的RPS提高
压力测试:
-
Echo 测试:
-
系统零负载的情况下的压力,能够测得系统性能的上限
-
RPS (Requests per second, 每秒请求数):
-
Gunicorn + Gevent: 20000 r/s
-
Gunicorn + Meinheld: 36000 r/s
-
-
-
带缓存的接口测试:
-
RPS: 9000 r/s
-
工作中常见水平: 3000 r/s ~ 5000 r/s
-
-
带数据库处理的接口测试:
-
RPS: 120 r/s
-
工作中常见水平: 300 r/s ~ 600 r/s
-
QPS (每秒查询数) TPS (每秒事务数, 数据库指标)
影响服务器性能的因素:
-
硬件
-
CPU
-
内存
-
硬盘
-
网卡
-
网络带宽
-
-
软件
-
程序语言: C/C++ > Go > Java > Python / Javascript / Ruby / PHP
-
操作系统: Linux > Windows
-
内核参数:
-
服务器最大连接数: net.core.somaxconn = 65535
-
最大文件描述符: ulimit -n 65535
-
KeepAlive: 使 HTTP 连接可以在一定时间内重用
-
IO处理模式: 异步 IO > 同步 IO,可以使用多进程、多线程、多协程等机制达到
-
IO多路复用: epoll
-
-

浙公网安备 33010602011771号