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

news/2024/12/22 13:38:21/

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 requestsServer Software:        uvicorn
Server Hostname:        0.0.0.0
Server Port:            888Document Path:          /predict
Document Length:        141 bytesConcurrency 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] received8890.65 kb/s sent8904.47 kb/s totalConnection 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     105Percentage of the requests served within a certain time (ms)50%     9466%     9475%     9580%     9590%     9695%     9898%     9999%    101100%    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] received8890.65 kb/s sent8904.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 的合并。

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


http://www.ppmy.cn/news/1557199.html

相关文章

wepack如何进行性能优化

Webpack 是一个模块打包工具&#xff0c;可以将多个模块打包成一个或多个文件。在进行性能优化时&#xff0c;可以从以下几个方面入手&#xff1a; 减少打包文件的体积&#xff1a;可以通过代码压缩、去除无用代码、按需加载等方式来减少打包文件的体积。可以使用 UglifyJSPlug…

基础电路的学习

1、戴维南定理 ①左边的图可简化为一个电阻&#xff0b;一个电压源。② ③电压源可相当于开路。将R2移到左边&#xff0c;R1和R2相当于并联。RR1//R2 Rx和Rt相等时&#xff0c;灵敏度最大&#xff0c;因此使Rt10K。 104电容是0.1uf。 三位数字的前两位数字为标称容量的有效数…

1. JasperSoft介绍与安装

Jaspersoft介绍 Jaspersoft是一款开源的&#xff0c;强大灵活并且使用广泛的报表软件。能够展示丰富的页面内容&#xff0c;并将之转换成PDF、HTML或者XML格式&#xff0c;该库完全由Java写出&#xff0c;可以用于在各种Java应用程序&#xff0c;非常适合Java开发者用来做报表生…

科技查新对专利申请有什么帮助?

科技查新对专利申请的帮助主要体现在以下几个方面&#xff1a; 避免重复申请&#xff1a;在申请专利之前进行科技查新&#xff0c;可以帮助申请人了解所申请的技术或发明是否已经被他人申请或公开&#xff0c;从而避免因重复申请而导致的专利无效。这有助于节省申请费用和时间…

Python-装饰器(Decorator)详解

在python中&#xff0c;函数是一等公民&#xff0c;意味着函数可以像其他对象一样被赋值、传递参数、作为返回值等。装饰器的基本语法是使用符号将一个函数作为参数传递给另一个函数&#xff08;即装饰器&#xff09;。被装饰的函数在被调用时&#xff0c;实际上会执行装饰器函…

自动生成发票数据并存入Excel

自动生成发票数据并存入Excel 目录 简介环境准备代码拆分与详细解释 导入依赖库初始化Faker对象生成随机发票信息保存发票信息到Excel文件流程执行 运行效果注意事项 简介 在处理财务数据时&#xff0c;生成和管理发票是一项常见的任务。本文将指导你如何使用 Python 生成一…

【D04】网络安全基本命令

网络安全基本命令 想学会网络安全,就必须学会基本的网络常用命令,才能更好的去掌握网络,保护自己的系统&#xff0c;防止入侵。我们必须学会的基本的网络命令主要是基于Windows NT平台下的基本命令&#xff0c;也就是说windows 98/windows ME的下部分命令是不能运行的。所以说&…

手机银行模拟器,一款高仿真银行app的模拟器,可以修改姓名 卡号 余额 做转账记录 做流水

&#x1f4f1;手机银行模拟器让你自由定制你的金融生活。无论是流水账单、金额&#xff0c;还是个人信息&#xff0c;一切都可以按照你的意愿来模拟修改&#xff0c;让你体验模拟器带来的快乐&#xff01; 链接&#xff1a;https://pan.quark.cn/s/c2f614f3447f 提取码&#…