Files
digit-cracker/BENCHMARK_GUIDE.md
2025-10-30 16:31:47 +08:00

8.0 KiB
Raw Permalink Blame History

并发性能测试使用指南

📋 概述

本项目提供了完整的并发性能测试工具,用于评估 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

性能调优建议

如果性能不理想,可以尝试:

  1. 调整模型参数

    # 降低置信度阈值
    --conf 0.15
    
    # 减小输入图片尺寸
    --imgsz 256
    
  2. 优化并发配置

    • 根据 CPU 核心数调整并发用户数
    • 监控系统资源使用情况
  3. 使用更快的模型

    # 使用更小的模型(如果准确率满足要求)
    --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

🎓 最佳实践

  1. 基线测试:先建立性能基线(单用户测试)
  2. 逐步加压:从低并发逐步提高到高并发
  3. 多次测试每个场景测试3-5次取平均值
  4. 记录环境:记录测试时的系统环境和资源使用情况
  5. 对比分析:保存历史测试数据,进行趋势分析

📞 相关文档


作者: Gavin Chan
创建日期: 2025-01-30
最后更新: 2025-01-30