228 lines
5.7 KiB
Markdown
228 lines
5.7 KiB
Markdown
# TopFans 压测报告
|
||
|
||
## 📋 运行信息
|
||
|
||
| 项 | 值 |
|
||
|---|---|
|
||
| **生成时间** | 2026-06-15 20:05:56 CST |
|
||
| **压测开始** | 2026-06-15 20:05:47 CST |
|
||
| **压测结束** | 2026-06-15 20:05:56 CST |
|
||
| **总耗时** | 9s |
|
||
| **目标地址** | `http://localhost:8080` |
|
||
| **测试场景** | S4 |
|
||
| **阶梯模式** | step (`1,2,3`) |
|
||
| **JWT 签名密钥** | `topfans-***` (前 8 位) |
|
||
| **监控模式** | off |
|
||
| **总请求数** | 34 |
|
||
| **总错误数** | 26 (76.47%) |
|
||
| **5xx 数** | 0 (0.00%) |
|
||
|
||
---
|
||
|
||
## 🎯 执行摘要
|
||
|
||
**总览**: ✅ 1 健康 / ⚠️ 0 警告 / 🚨 2 严重 (共 3)
|
||
|
||
🚨 **关键问题** (2 个):
|
||
|
||
- **S2 (浏览资产详情)**: 错误率 100.00%
|
||
- **S4 (资产铸造 (mint))**: 错误率 100.00%
|
||
|
||
**场景速览**:
|
||
|
||
- ✅ **S1 用户登录** — p99=83ms, err 0.00%
|
||
- 🚨 **S2 浏览资产详情** — p99=3ms, err 100.00%
|
||
- 🚨 **S4 资产铸造 (mint)** — p99=2ms, err 100.00%
|
||
|
||
---
|
||
|
||
## 📊 总览表
|
||
|
||
| 场景 | 描述 | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 拐点 RPS | 状态 |
|
||
|------|------|-------|-----|-----|-------|-------|-------|-------|---------|------|
|
||
| **S1** | 用户登录 | 8 | 0 (0.00%) | 0 (0.00%) | 74 | 83 | 83 | 83 | — | ✅ |
|
||
| **S2** | 浏览资产详情 | 8 | 8 (100.00%) | 0 (0.00%) | 2 | 3 | 3 | 3 | — | 🚨 |
|
||
| **S4** | 资产铸造 (mint) | 18 | 18 (100.00%) | 0 (0.00%) | 1 | 2 | 2 | 2 | — | 🚨 |
|
||
|
||
> 说明: Err 包含 4xx + 5xx,5xx 是子集。错误率 = Err / Total。
|
||
|
||
## 🔬 跨场景瓶颈分析
|
||
|
||
✅ **无明显瓶颈**,所有场景 P99 都在阈值内。
|
||
|
||
**P99 / 阈值 比率** (从高到低):
|
||
|
||
- S1: 0.08x (83ms)
|
||
- S2: 0.01x (3ms)
|
||
- S4: 0.00x (2ms)
|
||
|
||
---
|
||
|
||
## ✅ S1 用户登录
|
||
|
||
### 📌 测试说明
|
||
|
||
| 项 | 值 |
|
||
|---|---|
|
||
| **API** | `POST /api/v1/auth/login` |
|
||
| **负载类型** | ✏️ 轻写 |
|
||
| **业务说明** | 用户身份认证,签发 JWT |
|
||
| **影响范围** | 🔴 所有用户必经路径,失败 = 用户进不来 |
|
||
|
||
### 📈 性能指标 vs 健康阈值
|
||
|
||
| 指标 | 实测 | 阈值 | 判定 |
|
||
|------|------|------|------|
|
||
| P50ms | 74 | ≤100 | ✅ |
|
||
| P95ms | 83 | ≤300 | ✅ |
|
||
| P99ms | 83 | ≤1000 | ✅ |
|
||
| Maxms | 83 | — | ℹ️ 参考 |
|
||
| 错误率 | 0.00% | ≤1.00% | ✅ |
|
||
| 5xx 率 | 0.00% | ≤0.10% | ✅ |
|
||
|
||
### 📍 拐点分析
|
||
|
||
ℹ️ 仅 1 个 stage,未做阶梯测试,无法判断拐点。
|
||
|
||
### 🔢 阶梯结果
|
||
|
||
| Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 |
|
||
|-------|-----------|-------|-----|-----|-------|-------|-------|-------|------|
|
||
| 1 | 1 | 8 | 0 | 0 | 74 | 83 | 83 | 83 | |
|
||
|
||
### 🎯 行动项
|
||
|
||
✅ 无需行动项 — 所有指标在阈值内。
|
||
|
||
### 📉 图表
|
||
|
||

|
||
|
||
---
|
||
|
||
## 🚨 S2 浏览资产详情
|
||
|
||
### 📌 测试说明
|
||
|
||
| 项 | 值 |
|
||
|---|---|
|
||
| **API** | `GET /api/v1/assets/{id}` |
|
||
| **负载类型** | 📖 读 |
|
||
| **业务说明** | 高频读路径,典型缓存命中场景 |
|
||
| **影响范围** | 🟢 单用户最高频操作,影响页面加载体验 |
|
||
|
||
### 📈 性能指标 vs 健康阈值
|
||
|
||
| 指标 | 实测 | 阈值 | 判定 |
|
||
|------|------|------|------|
|
||
| P50ms | 2 | ≤50 | ✅ |
|
||
| P95ms | 3 | ≤150 | ✅ |
|
||
| P99ms | 3 | ≤500 | ✅ |
|
||
| Maxms | 3 | — | ℹ️ 参考 |
|
||
| 错误率 | 100.00% | ≤1.00% | 🚨 |
|
||
| 5xx 率 | 0.00% | ≤0.10% | ✅ |
|
||
|
||
### 📍 拐点分析
|
||
|
||
ℹ️ 仅 1 个 stage,未做阶梯测试,无法判断拐点。
|
||
|
||
### 🔢 阶梯结果
|
||
|
||
| Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 |
|
||
|-------|-----------|-------|-----|-----|-------|-------|-------|-------|------|
|
||
| 1 | 1 | 8 | 8 | 0 | 2 | 3 | 3 | 3 | |
|
||
|
||
### 🎯 行动项
|
||
|
||
- [ ] **🟡 P1**: 错误率 100.00% — 检查 4xx 错误码,看是否 JWT 过期 / 数据缺失
|
||
|
||
### 📉 图表
|
||
|
||

|
||
|
||
---
|
||
|
||
## 🚨 S4 资产铸造 (mint)
|
||
|
||
### 📌 测试说明
|
||
|
||
| 项 | 值 |
|
||
|---|---|
|
||
| **API** | `POST /api/v1/assets/mints/precreate` |
|
||
| **负载类型** | 🛠️ 重写 |
|
||
| **业务说明** | 写重路径:OSS 上传 + 签名 + 事务落库 |
|
||
| **影响范围** | 🟡 核心交易,影响创作者产出节奏 |
|
||
|
||
### 📈 性能指标 vs 健康阈值
|
||
|
||
| 指标 | 实测 | 阈值 | 判定 |
|
||
|------|------|------|------|
|
||
| P50ms | 1 | ≤300 | ✅ |
|
||
| P95ms | 2 | ≤800 | ✅ |
|
||
| P99ms | 2 | ≤2000 | ✅ |
|
||
| Maxms | 2 | — | ℹ️ 参考 |
|
||
| 错误率 | 100.00% | ≤1.00% | 🚨 |
|
||
| 5xx 率 | 0.00% | ≤0.10% | ✅ |
|
||
|
||
### 📍 拐点分析
|
||
|
||
✅ **拐点未触发** — 全程 3 个 stage 健康运行,最高 3 RPS p99=2ms。
|
||
|
||
### 🔢 阶梯结果
|
||
|
||
| Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 |
|
||
|-------|-----------|-------|-----|-----|-------|-------|-------|-------|------|
|
||
| 1 | 1 | 3 | 3 | 0 | 4 | 9 | 9 | 9 | |
|
||
| 2 | 2 | 6 | 6 | 0 | 1 | 2 | 2 | 2 | -77% |
|
||
| 3 | 3 | 9 | 9 | 0 | 1 | 2 | 2 | 2 | +6% |
|
||
|
||
### 🎯 行动项
|
||
|
||
- [ ] **🟡 P1**: 错误率 100.00% — 检查 4xx 错误码,看是否 JWT 过期 / 数据缺失
|
||
|
||
### 📉 图表
|
||
|
||

|
||
|
||
---
|
||
|
||
## 📎 附录
|
||
|
||
### 健康阈值说明
|
||
|
||
- **P50/P95/P99**: 百分位延迟 (毫秒),值越小越好
|
||
- **错误率**: 4xx+5xx 请求占比,健康 < 1%
|
||
- **5xx 率**: 服务端错误率,健康 < 0.1%
|
||
- **拐点**: 阶梯测试中,p99 相对前一 stage 涨幅 > 50% 的第一个 stage
|
||
|
||
### 文件清单
|
||
|
||
```
|
||
reports/
|
||
├── final-report.md (本文件)
|
||
├── baseline.csv (Excel 可打开的汇总)
|
||
├── s1.json
|
||
├── s1.png
|
||
├── s2.json
|
||
├── s2.png
|
||
├── s3.json
|
||
├── s3.png
|
||
├── s4.json
|
||
├── s4.png
|
||
├── s5.json
|
||
├── s5.png
|
||
├── s6.json
|
||
├── s6.png
|
||
├── s7.json
|
||
├── s7.png
|
||
```
|
||
|
||
### 如何复现
|
||
|
||
```bash
|
||
cd /opt/topfans/loadtest
|
||
./loadgen --cmd=run --scenarios=S4 --stage=step --step-schedule='1,2,3' \
|
||
--target=http://localhost:8080 \
|
||
--monitor=off \
|
||
```
|