接口性能测试避坑 Django+Nginx+uwsgi接口性能调优postman,Apifox,ab

使用Django开发了个接口供外部调用,Django的并发性能弱早有所闻,所以采用了Django+Nginx+uwsgi架构来提高并发量,来测试一下并发能力到底如何。

服务器配置:CPU 2,内存8G

接口内容只有3句,暂不用sleep模拟接口的处理耗时:

    request_data = {"code":"0","msg":"test"}
    logger.info(f'---------------')
    return JsonResponse(request_data)

首先使用了postman测试结果是每秒平均处理能力为12次左右,因为 postman 的run 测试不是并发,不是并发,不是并发!

接着采用Apifox进行测试,的确是并发了,测试结果大致如下:

Nginx 主要配置为:

worker_processes 1
keepalive_timeout 65
worker_connections 1024

大致测试结果如下:

接口性能测试避坑 Django+Nginx+uwsgi接口性能调优postman,Apifox,ab_第1张图片

虽然看起来是并发了,但是处理能力怎么调整都无法超过50次每秒,而且这是在接口基本就是一个空函数的情况下。Nginx其他参数也进行了调整,如worker_processes、multi_accept off、use epoll等,处理能力都没有大的变化。

最后检查了Nginx的访问日志access.log,发现接收到的请求就远远没有达到我在Apifox中设置的每秒100,考虑问题应该出在了发送请求的性能上,然后用多台电脑同时使用Apifox测试,果然处理能力上来了。

统计的结果显示单台Apifox每秒能发出的请求无法达到每秒100次,发送请求的并发能力和客户端机器配置高低也有很关联,本轮测试中的最高发送请求次数为42次每秒。

最终通过Apifox调整的参数为如下,其他基本都是系统默认或安装时默认

uwsgi:

processes=2;
threads=30;
listen=1000;
buffer-size=32768;
max-requests=500;

nginx:

worker_processes 2;
worker_connections  1024;

最后祭出大杀器 ab 指令:

ab -n 500 -c 500 http://*.*.*.*/test
-n 总请求次数
-c 并发数
上述指令意思是请求接口 http://*.*.*.*/test , 总共请求500次 ,并发量为500。

测试出来的结果为:平均每秒处理能力为112次左右,整整比Apifox测试出来的翻了1倍多。

最后,在接口函数内sleep了500ms来模拟接口内部处理时长,测得的性能最优配置如下:

服务器配置 CPU 2 内存 8G

nginx主要配置
worker_processes  2
worker_connections  1024;

uwsgi主要配置
processes=2
threads=60

接口内休眠500ms后的测试结果如下:
平均每秒最大处理能力:60次
1秒内成功返回最大并发数:60
2秒内成功返回最大并发数:160
3秒内成功返回最大并发数:280

综上所述,并发测试不要采用postman,少量并发测试可以采用Apifox,大致少于30次并发的可以考虑采用,要验证接口性能极限还是建议采用ab命令。

ab 命令安装:

windows 安装

官方下载链接:https://www.apachehaus.com/cgi-bin/download.plx

下载Apache,解压后直接用cmd进入目录\Apache24\bin使用,或添加环境变量。

linux 安装

yum -y install httpd

你可能感兴趣的:(Python,django,ab测试,测试工具)