Python中如何使用sanic框架进行压力测试?
用 sanic 写了个服务
与 flask 编写的版本对比 rps 确实提高不少
但做压测的时候水平拓展 服务器(单核)加到 2 个以上 rps 就不变了 cpu 利用率不到 50%
查找许久无解
哪位能提供点建议呢?
cpu 为何利用率那么低,单个机器 cpu 利用率正常,2 个机器略不稳定,但也正常,继续加就 cpu 利用率很低
Python中如何使用sanic框架进行压力测试?
有没有指定 worker 的数量?
app.run(workers=2)
用sanic做压力测试,直接上代码。我一般用locust,因为写起来简单,能模拟真实用户场景。
先装依赖:
pip install sanic locust
建个测试用的sanic应用 app.py:
from sanic import Sanic, json
app = Sanic("TestApp")
@app.get("/")
async def index(request):
return json({"message": "Hello, Locust!"})
@app.get("/api/data")
async def get_data(request):
# 模拟一些处理
await app.loop.run_in_executor(None, lambda: sum(range(10000)))
return json({"data": [1, 2, 3, 4, 5]})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, access_log=False)
再写locust测试文件 locustfile.py:
from locust import HttpUser, task, between
class SanicUser(HttpUser):
wait_time = between(0.5, 2.5) # 用户等待时间
@task(1) # 权重为1
def index_page(self):
self.client.get("/")
@task(3) # 权重为3,更频繁调用
def api_data(self):
self.client.get("/api/data")
运行测试:
- 启动sanic服务:
python app.py - 另开终端运行locust:
locust -f locustfile.py --host=http://localhost:8000 - 浏览器打开
http://localhost:8089,设置并发用户数、生成速率,开始测试
locust的Web界面会实时显示RPS、响应时间、失败率等指标。要生成报告就加--headless参数:
locust -f locustfile.py --host=http://localhost:8000 --headless -u 100 -r 10 -t 30s
这个命令模拟100用户,每秒启动10个,跑30秒。
用locust就行,配置简单数据直观。
gunicorn 跑的 开了四个 有猜测是不是在 worker 切换消耗了时间
sanic 建议裸跑吧
谢谢回复 为什么裸跑比较好呢?我试了下裸跑 还是会在第三台的时候 rps 上不去 cpu 利用不起来~~~
有人在生产系统上用过 sanic 吗?去年试图写个小应用,结果发现坑太多,就弃了,不知道现在什么情况。
我用 sanic 写个几个小应用 性能是可以的 我现在就是压测水平拓展发现有点问题 不知是我代码问题还是什么
不知有没有其他人遇到过
我一直在用 sanic, 都是裸跑的,
估摸着是 gunicorn 的问题
裸跑了 问题依旧 无法水平扩展 你几台机器?
搜了下 sanic,跟 flask 太像啦

