# 并发性能测试使用指南 ## 📋 概述 本项目提供了完整的并发性能测试工具,用于评估 YOLO 数字识别系统在多用户同时访问场景下的性能表现。 ## 🎯 测试工具 ### 1. `benchmark_concurrent.py` - 核心测试脚本 模拟 n 个用户并发执行数字识别任务。 **主要功能:** - ✅ 支持自定义并发用户数和每用户图片数 - ✅ 循环使用 valid 文件夹中的图片 - ✅ 统计详细的性能指标(QPS、响应时间、成功率等) - ✅ 生成文本和 JSON 格式的报告 - ✅ 支持不同的模型和配置参数 **基本用法:** ```bash # 模拟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 ``` **完整参数:** ```bash --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 个并发用户),适合快速验证。 **使用方法:** ```bash ./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 个并发用户)。 **使用方法:** ```bash ./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. 开发阶段** ```bash # 快速测试,验证功能正常 python scripts/benchmark_concurrent.py --users 3 --images-per-user 5 --verbose ``` **2. 性能优化** ```bash # 运行快速套件,对比优化前后 ./scripts/run_benchmark_quick.sh ``` **3. 上线前验证** ```bash # 运行完整套件,全面评估 ./scripts/run_benchmark_suite.sh ``` **4. 压力测试** ```bash # 高并发测试 python scripts/benchmark_concurrent.py --users 50 --images-per-user 10 ``` ### 性能调优建议 如果性能不理想,可以尝试: 1. **调整模型参数** ```bash # 降低置信度阈值 --conf 0.15 # 减小输入图片尺寸 --imgsz 256 ``` 2. **优化并发配置** - 根据 CPU 核心数调整并发用户数 - 监控系统资源使用情况 3. **使用更快的模型** ```bash # 使用更小的模型(如果准确率满足要求) --model yolov8n.pt ``` ## 📁 输出文件说明 ### 文本报告 (`.txt`) 详细的性能测试报告,包含: - 测试配置信息 - 总体性能统计 - 响应时间分析 - 各用户执行情况 - 失败任务详情(如有) ### JSON 数据 (`.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 文件可用于: - 后续数据分析 - 生成自定义报告 - 性能趋势对比 ## 🔍 故障排查 ### 问题:测试时间过长 **原因:** 并发数或图片数设置过高 **解决:** ```bash # 减少并发数或图片数 python scripts/benchmark_concurrent.py --users 5 --images-per-user 10 ``` ### 问题:部分识别失败 **原因:** 图片质量差或置信度阈值过高 **解决:** ```bash # 降低置信度阈值 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 使用率 ## 📝 自定义测试 ### 创建自定义测试脚本 ```bash #!/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 ``` ## 🎓 最佳实践 1. **基线测试**:先建立性能基线(单用户测试) 2. **逐步加压**:从低并发逐步提高到高并发 3. **多次测试**:每个场景测试3-5次,取平均值 4. **记录环境**:记录测试时的系统环境和资源使用情况 5. **对比分析**:保存历史测试数据,进行趋势分析 ## 📞 相关文档 - [README.md](../README.md) - 项目完整文档 - [QUICKSTART.md](../QUICKSTART.md) - 快速开始指南 - [FINAL_REPORT.md](../FINAL_REPORT.md) - 项目性能报告 --- **作者**: Gavin Chan **创建日期**: 2025-01-30 **最后更新**: 2025-01-30