YOLOv8目标检测(七)_AB压力测试

YOLOv8目标检测(一)_检测流程梳理:YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客

YOLOv8目标检测(二)_准备数据集:YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客

YOLOv8目标检测(三)_训练模型:YOLOv8目标检测(三)_训练模型_yolo data.yaml-CSDN博客

YOLOv8目标检测(三*)_最佳超参数训练:YOLOv8目标检测(三*)_最佳超参数训练_yolo 为什么要选择yolov8m.pt进行训练-CSDN博客

YOLOv8目标检测(四)_图片推理:YOLOv8目标检测(四)_图片推理-CSDN博客

YOLOv8目标检测(五)_结果文件(run/detrct/train)详解:YOLOv8目标检测(五)_结果文件(run/detrct/train)详解_yolov8 yolov8m.pt可以训练什么-CSDN博客

YOLOv8目标检测(六)_封装API接口:YOLOv8目标检测(六)_封装API接口-CSDN博客

YOLOv8目标检测(七)_AB压力测试:YOLOv8目标检测(七)_AB压力测试-CSDN博客

为什么要进行压力测试?

评估其在高并发和大负载下的性能表现,确保系统能够在实际使用场景中稳定运行,并找到潜在的瓶颈或优化点。

简单来说:测一测好多人访问调用,这个地址会不会崩掉,速度怎么样。

1.安装AB

Apache Bench (简称 ab)是一个用于测试和评估 Web 服务器性能的命令行工具。它是 Apache HTTP 服务器的附带工具之一,主要用于压力测试和性能分析

命令行输入

复制代码
sudo apt-get update
sudo apt-get install apache2-utils

这个命令如果不行用

复制代码
apt-get install apache2-utils -y

可以输入ab看一下是否安装成功,如上图。

2.测试命令

(1)基本并发测试

复制代码
ab -n 1000 -c 10 <http://example.com/>

(2)POST 请求测试

笔者常用这个,还有一些其他的请求测试,这里不再一一列举。

复制代码
ab -n 1000 -c 5 -r -p ./tireddrive_abtest.json -T 'application/json' '<http://0.0.0.0:888/predict>'
  • n 1000:指定总共发起的请求数。这里是 1000,意味着工具会发送 1000 个请求到目标 URL。
  • c 5:指定并发请求数。即在同一时刻,最多会有 5 个请求并发执行。这里是 5,表示最多有 5 个并发请求。
  • r :表示"忽略响应数据"。当使用这个选项时,ab 会忽略服务器返回的响应内容,只关注响应的时间和其他性能指标。这对于性能测试非常有用,因为不需要解析响应内容,节省了计算资源。
  • p ./tireddrive_abtest.json :指定一个文件,ab 会读取该文件的内容,并将其作为请求的正文(POST 请求的 payload)。tireddrive_abtest.json 文件包含了请求的数据,比如 JSON 格式的数据体。
  • T 'application/json' :设置请求的 Content-Type 头部,这里是 application/json,表示请求正文是 JSON 格式的数据。这通常用于向 API 发送 JSON 数据。
  • '<http://0.0.0.0:888/predict' :目标> URL,表示将发送请求到 http://0.0.0.0:888/predict。这是你正在测试的 HTTP 服务器地址和路径。

3.如何使用

笔者会测试修改-c和-P这两个参数,这里说明一下-P的文件,通常我会测一个有目标的和一个无目标的。

(1)起服务(参考上一个文章https://blog.csdn.net/weixin_48870215/article/details/144516248?fromshare=blogdetail\&sharetype=blogdetail\&sharerId=144516248\&sharerefer=PC\&sharesource=weixin_48870215\&sharefrom=from_link)

(2)准备yourfile.json文件

1)准备一张要测试的有目标的图片

2)将图片转为base64格式

这里是笔者常用的将图片转为base64的脚本

复制代码
import base64

# 打开图片并将其转换为 Base64 编码
with open("D:/Desktop/network_tireddrive (31).jpg", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read()).decode('utf-8')

# 将生成的 Base64 字符串写入到 txt 文件中
with open("D:\\Desktop\\output_base64.txt", "w") as text_file:
    text_file.write(encoded_string)

print("Base64 encoded string has been saved to output_base64.txt")

运行后部分结果如下

3)修改tireddrive_abtest.json

替换yourpicture_base64

请求格式例子如下,需要跟你写服务中的数据格式保持一致,如果读者参考了我之前的格式,那么直接用。

复制代码
{"image":"yourpicture_base64",
"customerID":"sdcm_001",
"imageID":"image_001",
"minScore": 0.35,
"maxScore": 0.99,
"timeStamp":"1234455",
"flexibleParams":""}

(3)运行ab命令

复制代码
ab -n 1000 -c 5 -r -p ./tireddrive_abtest.json -T 'application/json' '<http://0.0.0.0:888/predict>'

4.查看结果

运行结果如下

复制代码
正样本 请求数1000 5 	GPU-Util 17
----------------------------------------------------------------------------------------------------------------
root@c712345678:/usr/src/ultralytics# ab -n 1000 -c 5 -r -p ./tireddrive_abtest.json -T 'application/json' '<http://0.0.0.0:888/predict>'
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, <http://www.zeustech.net/>
Licensed to The Apache Software Foundation, <http://www.apache.org/>

Benchmarking 0.0.0.0 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software:        uvicorn
Server Hostname:        0.0.0.0
Server Port:            888

Document Path:          /predict
Document Length:        141 bytes

Concurrency Level:      5
Time taken for tests:   18.868 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      267000 bytes
Total body sent:        171773000
HTML transferred:       141000 bytes
Requests per second:    53.00 [#/sec] (mean)
Time per request:       94.339 [ms] (mean)
Time per request:       18.868 [ms] (mean, across all concurrent requests)
Transfer rate:          13.82 [Kbytes/sec] received
                        8890.65 kb/s sent
                        8904.47 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:    20   94   4.3     94     105
Waiting:       20   94   4.3     94     105
Total:         20   94   4.3     94     105

Percentage of the requests served within a certain time (ms)
  50%     94
  66%     94
  75%     95
  80%     95
  90%     96
  95%     98
  98%     99
  99%    101
 100%    105 (longest request)

笔者通常关注的指标如下:

1)Requests per second

复制代码
Requests per second:    53.00 [#/sec] (mean)
  • 含义:表示在整个测试过程中,服务器每秒处理的平均请求数。
  • 解释:这里是 53,意味着服务器平均每秒能够处理 53 个请求。这个数值越高,代表服务器的吞吐量越大,处理请求的能力越强。

2)Time per request

复制代码
Time per request:       94.339 [ms] (mean)
Time per request:       18.868 [ms] (mean, across all concurrent requests)

94.339

  • 含义:表示每个请求的平均响应时间,单位是毫秒(ms)。
  • 解释:94.339 毫秒是每个请求从发出到服务器响应的平均时间。如果响应时间过长,可能表示服务器负载过高或网络存在瓶颈。

18.868

  • 含义:表示在并发请求的情况下,每个请求的平均响应时间,单位为毫秒(ms)。这个值考虑了并发请求的影响。
  • 解释:这里是 18.868 毫秒,它是平均的每个请求的响应时间,但此值已按并发请求数(在这个例子中是 5)做了平均。这个值比上面的 Time per request(94.339 毫秒)低,因为并发请求可以让多个请求同时进行,从而减少等待时间。

3)Transfer rate

复制代码
Transfer rate:          13.82 [Kbytes/sec] received
                        8890.65 kb/s sent
                        8904.47 kb/s total

13.82

  • 含义:表示服务器在测试过程中每秒接收的数据量,单位是 Kbytes/sec(千字节每秒)。
  • 解释:13.82 Kbytes/sec 表示服务器每秒钟从客户端接收了约 13.82 千字节的数据。这通常与请求的大小和请求频率有关。

8890.65

  • 含义:表示服务器每秒发送的数据量,单位是 kb/s(千比特每秒)。
  • 解释:8890.65 kb/s 表示服务器在整个测试过程中每秒钟发送了约 8890.65 千比特的数据。这个数值越高,说明服务器响应的返回数据量较大。

8904.47

  • 含义:表示整个测试过程中服务器的总数据传输速率,包括接收和发送的数据,单位是 kb/s(千比特每秒)。
  • 解释:8904.47 kb/s 是服务器同时接收和发送数据的总速率。这个数值是 Transfer rate receivedsent 的合并。

恭喜你学会了如何测试在高并发和大负载下服务的性能表现。

相关推荐
sinat_286945193 小时前
AI Coding 时代的 TDD:从理念到工程落地
人工智能·深度学习·算法·tdd
Rabbit_QL5 小时前
【理论分析】信息熵的极值问题:什么时候最小?什么时候最大?
人工智能·深度学习
Z.风止6 小时前
Large Model-learning(3)
人工智能·笔记·后端·深度学习
春末的南方城市6 小时前
比肩顶尖闭源模型!京东开源240亿参数多模态模型JoyAI-Image:统一理解/生成/编辑,重塑AI图像编辑。
人工智能·深度学习·机器学习·计算机视觉·aigc
kyle-fang6 小时前
大模型微调
人工智能·深度学习·机器学习
EmmaXLZHONG6 小时前
Deep Learning With Pytorch Notes
人工智能·pytorch·深度学习
龙文浩_7 小时前
AI NLP核心技术指南
人工智能·pytorch·深度学习·神经网络·自然语言处理
网络工程小王7 小时前
【大模型基础部署】(学习笔记)
人工智能·深度学习·机器学习
万里鹏程转瞬至7 小时前
论文简读:Embarrassingly Simple Self-Distillation Improves Code Generation
人工智能·深度学习
AI医影跨模态组学8 小时前
NPJ Precis Oncol 广东省人民医院放射科刘再毅团队:基于纵向MRI的深度学习模型预测乳腺癌病理完全缓解
人工智能·深度学习·论文·医学·医学影像