31 lines
1.9 KiB
Markdown
31 lines
1.9 KiB
Markdown
# 注册压测
|
|
|
|
在项目根目录运行:
|
|
|
|
```powershell
|
|
uv sync
|
|
uv run alembic upgrade head
|
|
uv run python scripts/load_test.py --seconds 20
|
|
```
|
|
|
|
脚本使用当前环境配置的真实 MySQL 和 Redis,自动启动本地单 worker Uvicorn
|
|
服务(关闭 reload 和 access log),依次测试 1、4、8、16、32、64 个并发注册。
|
|
每个档位持续发起请求 20 秒,然后等待在途请求完成;吞吐量包含收尾时间。
|
|
可以使用 `--concurrency 1 8 32 --seconds 60` 调整档位和时长。
|
|
|
|
指标包括注册成功数、HTTP/网络错误、成功吞吐量、平均/P50/P95/P99/最大延迟,
|
|
以及压测期间 `/api/users/me` 的响应延迟、错误数、服务进程树 CPU 和峰值 RSS。
|
|
普通认证探针每次响应后等待 100ms 再发起请求,只有一个在途探针,不能代表大量普通用户。
|
|
CPU 的 100% 代表占满一个逻辑核心;内存是服务进程树 RSS 之和,可能包含共享页重复计算。
|
|
客户端与服务在同一台机器运行,资源采样间隔随探针响应耗时变化,峰值可能漏采。
|
|
|
|
基线分别测量 10 次热连接 `SELECT 1`、Redis PING、本机 Argon2 哈希和无注册负载的
|
|
用户资料请求。网络指标包含远程服务处理时间,不等于纯网络延迟。
|
|
P95/P99 使用 nearest-rank 算法;短测样本少,不能据此推断长期稳定性或生产容量。
|
|
这是闭环并发测试,并发数表示同时在途的注册请求数,不是在线用户总数。
|
|
|
|
报告默认保存到 `artifacts/load-test.json`,可使用 `--output` 指定路径。
|
|
报告不包含密码、令牌和连接地址。结束后删除本轮随机前缀用户及对应 Redis 会话,
|
|
并记录残留计数;保留表结构和其他数据。异常时也会尝试清理,但强制结束整个脚本、
|
|
断电或依赖不可用时无法保证清理成功,应检查报告中的 `cleanup` 字段。
|