# TopFans 压测报告 ## 📋 运行信息 | 项 | 值 | |---|---| | **生成时间** | 2026-06-15 21:06:41 CST | | **压测开始** | 2026-06-15 21:05:10 CST | | **压测结束** | 2026-06-15 21:05:38 CST | | **总耗时** | 27s | | **目标地址** | `http://localhost:8080` | | **测试场景** | S1, S2, S4 | | **阶梯模式** | step (`1,2,3`) | | **JWT 签名密钥** | `topfans-***` (前 8 位) | | **监控模式** | off | | **总请求数** | 54 | | **总错误数** | 0 (0.00%) | | **5xx 数** | 0 (0.00%) | --- ## 🎯 执行摘要 **总览**: ✅ 3 健康 / ⚠️ 0 警告 / 🚨 0 严重 (共 3) 🎉 **所有场景通过健康阈值,系统可承载预期负载。** **场景速览**: - ✅ **S1 用户登录** — p99=96ms, err 0.00% - ✅ **S2 浏览资产详情** — p99=14ms, err 0.00% - ✅ **S4 资产铸造 (mint)** — p99=14ms, err 0.00% --- ## 📊 总览表 | 场景 | 描述 | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 拐点 RPS | 状态 | |------|------|-------|-----|-----|-------|-------|-------|-------|---------|------| | **S1** | 用户登录 | 18 | 0 (0.00%) | 0 (0.00%) | 86 | 96 | 96 | 96 | — | ✅ | | **S2** | 浏览资产详情 | 18 | 0 (0.00%) | 0 (0.00%) | 10 | 14 | 14 | 14 | — | ✅ | | **S4** | 资产铸造 (mint) | 18 | 0 (0.00%) | 0 (0.00%) | 7 | 14 | 14 | 14 | — | ✅ | > 说明: Err 包含 4xx + 5xx,5xx 是子集。错误率 = Err / Total。 ## 🔬 跨场景瓶颈分析 ✅ **无明显瓶颈**,所有场景 P99 都在阈值内。 **P99 / 阈值 比率** (从高到低): - S1: 0.10x (96ms) - S2: 0.03x (14ms) - S4: 0.01x (14ms) --- ## ✅ S1 用户登录 ### 📌 测试说明 | 项 | 值 | |---|---| | **API** | `POST /api/v1/auth/login` | | **负载类型** | ✏️ 轻写 | | **业务说明** | 用户身份认证,签发 JWT | | **影响范围** | 🔴 所有用户必经路径,失败 = 用户进不来 | ### 📈 性能指标 vs 健康阈值 | 指标 | 实测 | 阈值 | 判定 | |------|------|------|------| | P50ms | 86 | ≤100 | ✅ | | P95ms | 96 | ≤300 | ✅ | | P99ms | 96 | ≤1000 | ✅ | | Maxms | 96 | — | ℹ️ 参考 | | 错误率 | 0.00% | ≤1.00% | ✅ | | 5xx 率 | 0.00% | ≤0.10% | ✅ | ### 📍 拐点分析 ✅ **拐点未触发** — 全程 3 个 stage 健康运行,最高 3 RPS p99=96ms。 ### 🔢 阶梯结果 | Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 | |-------|-----------|-------|-----|-----|-------|-------|-------|-------|------| | 1 | 1 | 3 | 0 | 0 | 94 | 98 | 98 | 98 | | | 2 | 2 | 6 | 0 | 0 | 87 | 89 | 89 | 89 | -9% | | 3 | 3 | 9 | 0 | 0 | 86 | 96 | 96 | 96 | +7% | ### 🎯 行动项 ✅ 无需行动项 — 所有指标在阈值内。 ### 📉 图表 ![S1 RPS / P99 / Error](.//s1.png) --- ## ✅ S2 浏览资产详情 ### 📌 测试说明 | 项 | 值 | |---|---| | **API** | `GET /api/v1/assets/{id}` | | **负载类型** | 📖 读 | | **业务说明** | 高频读路径,典型缓存命中场景 | | **影响范围** | 🟢 单用户最高频操作,影响页面加载体验 | ### 📈 性能指标 vs 健康阈值 | 指标 | 实测 | 阈值 | 判定 | |------|------|------|------| | P50ms | 10 | ≤50 | ✅ | | P95ms | 14 | ≤150 | ✅ | | P99ms | 14 | ≤500 | ✅ | | Maxms | 14 | — | ℹ️ 参考 | | 错误率 | 0.00% | ≤1.00% | ✅ | | 5xx 率 | 0.00% | ≤0.10% | ✅ | ### 📍 拐点分析 ✅ **拐点未触发** — 全程 3 个 stage 健康运行,最高 3 RPS p99=14ms。 ### 🔢 阶梯结果 | Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 | |-------|-----------|-------|-----|-----|-------|-------|-------|-------|------| | 1 | 1 | 3 | 0 | 0 | 14 | 31 | 31 | 31 | | | 2 | 2 | 6 | 0 | 0 | 9 | 12 | 12 | 12 | -61% | | 3 | 3 | 9 | 0 | 0 | 10 | 14 | 14 | 14 | +13% | ### 🎯 行动项 ✅ 无需行动项 — 所有指标在阈值内。 ### 📉 图表 ![S2 RPS / P99 / Error](.//s2.png) --- ## ✅ S4 资产铸造 (mint) ### 📌 测试说明 | 项 | 值 | |---|---| | **API** | `POST /api/v1/assets/mints/precreate` | | **负载类型** | 🛠️ 重写 | | **业务说明** | 写重路径:OSS 上传 + 签名 + 事务落库 | | **影响范围** | 🟡 核心交易,影响创作者产出节奏 | ### 📈 性能指标 vs 健康阈值 | 指标 | 实测 | 阈值 | 判定 | |------|------|------|------| | P50ms | 7 | ≤300 | ✅ | | P95ms | 14 | ≤800 | ✅ | | P99ms | 14 | ≤2000 | ✅ | | Maxms | 14 | — | ℹ️ 参考 | | 错误率 | 0.00% | ≤1.00% | ✅ | | 5xx 率 | 0.00% | ≤0.10% | ✅ | ### 📍 拐点分析 ✅ **拐点未触发** — 全程 3 个 stage 健康运行,最高 3 RPS p99=14ms。 ### 🔢 阶梯结果 | Stage | TargetRPS | Total | Err | 5xx | P50ms | P95ms | P99ms | Maxms | 涨幅 | |-------|-----------|-------|-----|-----|-------|-------|-------|-------|------| | 1 | 1 | 3 | 0 | 0 | 12 | 15 | 15 | 15 | | | 2 | 2 | 6 | 0 | 0 | 7 | 12 | 12 | 12 | -18% | | 3 | 3 | 9 | 0 | 0 | 7 | 14 | 14 | 14 | +14% | ### 🎯 行动项 ✅ 无需行动项 — 所有指标在阈值内。 ### 📉 图表 ![S4 RPS / P99 / Error](.//s4.png) --- ## 📎 附录 ### 健康阈值说明 - **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=S1,S2,S4 --stage=step --step-schedule='1,2,3' \ --target=http://localhost:8080 \ --monitor=off \ ```