8.0 KiB
8.0 KiB
并发性能测试使用指南
📋 概述
本项目提供了完整的并发性能测试工具,用于评估 YOLO 数字识别系统在多用户同时访问场景下的性能表现。
🎯 测试工具
1. benchmark_concurrent.py - 核心测试脚本
模拟 n 个用户并发执行数字识别任务。
主要功能:
- ✅ 支持自定义并发用户数和每用户图片数
- ✅ 循环使用 valid 文件夹中的图片
- ✅ 统计详细的性能指标(QPS、响应时间、成功率等)
- ✅ 生成文本和 JSON 格式的报告
- ✅ 支持不同的模型和配置参数
基本用法:
# 模拟10个用户,每个用户识别20张图片
python scripts/benchmark_concurrent.py --users 10 --images-per-user 20
# 使用详细输出模式
python scripts/benchmark_concurrent.py --users 5 --images-per-user 10 --verbose
# 调整置信度阈值
python scripts/benchmark_concurrent.py --users 10 --images-per-user 20 --conf 0.15
# 指定输出文件
python scripts/benchmark_concurrent.py --users 20 --output results/my_test.txt
完整参数:
--users N # 并发用户数量(默认: 10)
--images-per-user N # 每个用户识别的图片数量(默认: 20)
--model PATH # 模型路径(默认: 最佳模型)
--source DIR # 图片源文件夹(默认: valid)
--conf FLOAT # 置信度阈值(默认: 0.2)
--imgsz INT # 输入图片大小(默认: 320)
--output FILE # 输出报告路径(默认: results/benchmark_report.txt)
--verbose # 显示详细日志
2. run_benchmark_quick.sh - 快速测试套件
运行一组预定义的快速测试(1, 3, 5, 8 个并发用户),适合快速验证。
使用方法:
./scripts/run_benchmark_quick.sh
测试配置:
- 并发级别:1, 3, 5, 8 用户
- 每用户图片数:10 张
- 总共测试:10 + 30 + 50 + 80 = 170 张图片
输出:
- 各并发级别的详细报告
- 性能对比摘要表格
- 保存位置:
results/benchmark_quick/
3. run_benchmark_suite.sh - 完整测试套件
运行更全面的测试(1, 3, 5, 10, 15, 20 个并发用户)。
使用方法:
./scripts/run_benchmark_suite.sh
测试配置:
- 并发级别:1, 3, 5, 10, 15, 20 用户
- 每用户图片数:20 张
- 总共测试:20 + 60 + 100 + 200 + 300 + 400 = 1080 张图片
输出:
- 各并发级别的详细报告
- 性能对比摘要表格
- 保存位置:
results/benchmark_suite/
📊 性能指标说明
报告包含的指标
总体性能:
- 总执行时间:所有并发用户完成的总时间
- 总识别图片数:所有用户处理的图片总数
- 成功率:成功识别的图片比例
- 吞吐量 (QPS):每秒处理的图片数量
响应时间统计:
- 平均响应时间:单张图片的平均识别时间
- 最小/最大响应时间:响应时间的范围
- P50/P90/P95/P99:百分位数,表示大部分请求的响应时间
各用户性能:
- 每个用户的图片数、成功数、总耗时、平均耗时
📈 测试结果示例
快速测试结果(实际测试数据)
并发用户 | 总图片 | 总耗时(s) | QPS | 平均响应(s)
---------|---------|-----------|--------|------------
1 | 10 | 0.17 | 60.30 | 0.014
3 | 30 | 0.36 | 84.35 | 0.027
5 | 50 | 0.58 | 86.05 | 0.042
8 | 80 | 1.10 | 72.65 | 0.081
标准测试结果(10用户×20图)
总体性能:
- 总执行时间: 2.85 秒
- 总识别图片数: 200
- 成功: 200 (100.0%)
- 吞吐量 (QPS): 70.28 图片/秒
响应时间统计:
- 平均响应时间: 0.123 秒
- P50 响应时间: 0.109 秒
- P90 响应时间: 0.167 秒
- P99 响应时间: 0.342 秒
💡 使用建议
场景选择
| 测试场景 | 推荐工具 | 适用情况 |
|---|---|---|
| 快速验证 | run_benchmark_quick.sh |
代码修改后快速验证性能 |
| 完整评估 | run_benchmark_suite.sh |
系统上线前全面测试 |
| 自定义测试 | benchmark_concurrent.py |
特定并发场景测试 |
| 压力测试 | benchmark_concurrent.py |
使用更高的并发数(如50+) |
测试流程建议
1. 开发阶段
# 快速测试,验证功能正常
python scripts/benchmark_concurrent.py --users 3 --images-per-user 5 --verbose
2. 性能优化
# 运行快速套件,对比优化前后
./scripts/run_benchmark_quick.sh
3. 上线前验证
# 运行完整套件,全面评估
./scripts/run_benchmark_suite.sh
4. 压力测试
# 高并发测试
python scripts/benchmark_concurrent.py --users 50 --images-per-user 10
性能调优建议
如果性能不理想,可以尝试:
-
调整模型参数
# 降低置信度阈值 --conf 0.15 # 减小输入图片尺寸 --imgsz 256 -
优化并发配置
- 根据 CPU 核心数调整并发用户数
- 监控系统资源使用情况
-
使用更快的模型
# 使用更小的模型(如果准确率满足要求) --model yolov8n.pt
📁 输出文件说明
文本报告 (.txt)
详细的性能测试报告,包含:
- 测试配置信息
- 总体性能统计
- 响应时间分析
- 各用户执行情况
- 失败任务详情(如有)
JSON 数据 (.json)
结构化的测试数据,包含:
{
"config": {...}, // 测试配置
"summary": { // 总体统计
"total_time": 2.85,
"total_images": 200,
"qps": 70.28
},
"users": [ // 每个用户的详细结果
{
"user_id": 0,
"results": [...], // 每张图片的识别结果
"total_time": 2.50,
"success_count": 20,
"avg_time": 0.125
}
]
}
JSON 文件可用于:
- 后续数据分析
- 生成自定义报告
- 性能趋势对比
🔍 故障排查
问题:测试时间过长
原因: 并发数或图片数设置过高
解决:
# 减少并发数或图片数
python scripts/benchmark_concurrent.py --users 5 --images-per-user 10
问题:部分识别失败
原因: 图片质量差或置信度阈值过高
解决:
# 降低置信度阈值
python scripts/benchmark_concurrent.py --conf 0.1
# 或先对图片进行预处理
python scripts/preprocess_images.py --input valid --output valid-processed --method clahe
python scripts/benchmark_concurrent.py --source valid-processed
问题:QPS 过低
可能原因:
- 模型加载开销(每个线程独立加载)
- 图片尺寸过大
- 系统资源不足
优化建议:
- 减小
--imgsz参数 - 关闭其他占用资源的程序
- 监控 CPU 使用率
📝 自定义测试
创建自定义测试脚本
#!/bin/bash
# 自定义测试场景
# 场景1:低并发长时间测试
python scripts/benchmark_concurrent.py \
--users 2 \
--images-per-user 100 \
--output results/scenario1.txt
# 场景2:高并发短时间测试
python scripts/benchmark_concurrent.py \
--users 50 \
--images-per-user 5 \
--output results/scenario2.txt
# 场景3:不同配置对比
for conf in 0.1 0.15 0.2 0.25; do
python scripts/benchmark_concurrent.py \
--users 10 \
--images-per-user 10 \
--conf $conf \
--output results/benchmark_conf_${conf}.txt
done
🎓 最佳实践
- 基线测试:先建立性能基线(单用户测试)
- 逐步加压:从低并发逐步提高到高并发
- 多次测试:每个场景测试3-5次,取平均值
- 记录环境:记录测试时的系统环境和资源使用情况
- 对比分析:保存历史测试数据,进行趋势分析
📞 相关文档
- README.md - 项目完整文档
- QUICKSTART.md - 快速开始指南
- FINAL_REPORT.md - 项目性能报告
作者: Gavin Chan
创建日期: 2025-01-30
最后更新: 2025-01-30