2.8 KiB
2.8 KiB
带宽负载测试报告
验证 3Mbps 服务器带宽是否能支撑 1000 用户
测试工具
测试工具位于 docs/bench/ 目录:
| 文件 | 说明 |
|---|---|
bandwidth_bench.sh |
一键运行完整基准测试(依赖 oha) |
bandwidth_analysis.rs |
Rust 编写的带宽推算工具 |
安装依赖
cargo install oha --version "1.4.7"
运行测试
# 一键运行所有基准测试
bash docs/bench/bandwidth_bench.sh
# 编译并运行 Rust 分析工具
rustc --edition 2024 docs/bench/bandwidth_analysis.rs -o /tmp/bandwidth_test
/tmp/bandwidth_test
实测数据(2026-07-03)
API 端点响应大小
| 端点 | 响应大小 | HTTP 状态 |
|---|---|---|
GET /health |
38 B | 200 |
GET / |
6,409 B | 200 |
GET /payment |
14,499 B | 200 |
POST /api/login |
~400 B | 200 |
GET /weather?page=1 |
~600 B | 200 |
POST /api/post-weather-data |
~120 B | 200 |
GET /api/user/profile |
~500 B | 200 |
| 静态文件 (CSS/JS) | ~7-15 KB | 200 |
压力测试(oha)
| 端点 | 并发 | 吞吐量 | 带宽占用 | 平均延迟 |
|---|---|---|---|---|
GET /health |
100 | 490 req/s | 18 KB/s | 190 ms |
GET /health (Keep-Alive) |
100 | 516 req/s | 19 KB/s | 190 ms |
GET / (6KB HTML) |
50 | 161 req/s | 322 KB/s | 310 ms |
GET /payment (14KB) |
50 | 135 req/s | 1.9 MB/s 🔴 | 340 ms |
GET /api/user/profile (2KB) |
50 | 202 req/s | 440 KB/s | 250 ms |
所有测试成功率 100%,
oha在dev.xmclassmate.top上运行。 🔴 表示超出 3Mbps (384 KB/s) 带宽限制。
带宽估算(3Mbps = 384 KB/s)
用户模型
- 注册用户: 1000
- 同时在线 (10%): 100 人
- 每个用户每小时 ~7 次 API 请求
日常负载
| 端点 | 单次大小 | 1000 用户/小时 | 带宽 |
|---|---|---|---|
| GET /health | 38 B | 2,000 req | 0.02 KB/s |
| GET / | 6.4 KB | 200 req | 0.36 KB/s |
| POST /api/login | 400 B | 100 req | 0.01 KB/s |
| GET /weather | 600 B | 3,000 req | 0.50 KB/s |
| POST /api/post-weather | 120 B | 500 req | 0.02 KB/s |
| 总计 | ~40 KB/s = 0.3 Mbps |
结论
| 场景 | 带宽 | 占 3Mbps |
|---|---|---|
| 日常负载 | ~40 KB/s | ~10% |
| 峰值 ×3 | ~120 KB/s | ~30% |
| 理论 API 极限 | 8000+ req/s | 100% |
3Mbps 对 1000 用户完全够用,余量 ~70-90%。
唯一瓶颈
大 HTML 页面(/payment 14.5KB)在突发大量访问时可能占满带宽:
- 26 个并发即可占满 3Mbps
- 日常用户不走此页面(仅管理员/付费网页访问)
文件索引
| 文件 | 路径 |
|---|---|
| 测试套件 | docs/bench/bandwidth_bench.sh |
| 分析工具 | docs/bench/bandwidth_analysis.rs |
| 本文档 | docs/BANDWIDTH-BENCHMARK.md |