开发者社区> 问答> 正文

django服务怎么样才能全部利用cpu资源 400 请求报错 

hello,各位。
我使用django和rest framework 写了一个简单的api接口,数据库用的是sqlite (后面用pgsql性能还下降了一点)
就一个model 可以简单的理解为book和auth 这样两个例子的model
我将服务搭建到树莓派(3b)上 4核 1g内存 (树莓派性能是差了点,开始之前我还是有心理准备)
我用ab测试,测试指令(每秒200并发,一共请求1000次)

ab -t 200 -n 1000 http://192.168.3.250:8000/api/

使用传统的runserver方式启动一个服务 每秒的并发数是13,我惊呆了。所以我换了gunicorn。
使用gunicorn之后,gunicorn+gevent 每秒并发11。
我在gunicorn上尝试加上 -w 4 参数多建立几个进程来提高处理速度,然而依旧差强人意。并发数量大概在12左右。
我使用htop观察进程的cpu占用和内存占用,发现进程占用基本上在50%左右4个核的平均值。内存的使用也不高,一百多m.
使用iotop观察io读写,在请求的过程中并没有发现有大量的io产生,虽然树莓派的sd卡读写比较烂,但是io就偶尔几十k顶多300k/s左右。
so,我很疑惑,在有大量并发请求的情况下,200的并发请求对于树莓派来说我认为是量比较大的请求了,这时候cpu应该会忙于请求工作开始负载,但是并没有满载,只有50%左右。
是什么原因导致的呢?python语言本身处理速度过慢导致?还是我并没有正确的配置我的django项目?
附上我使用gunicorn的代码
gunicorn -k gevent yoyoyo.wsgi:application -b 127.0.0.1:8000 --reload -w 4

展开
收起
kun坤 2020-05-30 23:00:18 830 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
RDS SQL Server CPU高使用率性能优化 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载