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 的合并。

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

相关推荐
这个男人是小帅1 小时前
【AutoDL】通过【SSH远程连接】【vscode】
运维·人工智能·pytorch·vscode·深度学习·ssh
互联网杂货铺2 小时前
几个常见的Jmeter压测问题
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
weixin_468466852 小时前
医学影像数据集汇总分享
深度学习·目标检测·数据集·图像分割·机器视觉·医学影像·ct影像
瞻邈3 小时前
lpips使用笔记
人工智能·python·深度学习
瞻邈3 小时前
Diffusers使用笔记
人工智能·python·深度学习
deephub3 小时前
LEC: 基于Transformer中间层隐藏状态的高效特征提取与内容安全分类方法
人工智能·深度学习·transformer·大语言模型·特征提取
UQI-LIUWJ4 小时前
datasets 笔记: 文本数据集的预处理(Tokenization)
人工智能·笔记·深度学习
WeeJot嵌入式4 小时前
长短期记忆网络(LSTM):深度学习中的序列数据处理利器
人工智能·深度学习·lstm
千天夜5 小时前
YOLO系列正传(三)神经网络的反向传播(back propagation)与公式推导
人工智能·python·深度学习·神经网络·学习·yolo·卷积神经网络
goTsHgo5 小时前
多兴趣召回——胶囊网络的原理解析
人工智能·深度学习·神经网络