HTTP压力测试概论

news2025/2/28 12:38:13

常用的HTTP服务压测工具介绍

在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。

HTTP服务压力测试工具

在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。

压测相关术语

  • 响应时间(RT) :指系统对请求作出响应的时间.
  • 吞吐量(Throughput) :指系统在单位时间内处理请求的数量
  • QPS每秒查询率(Query Per Second) :“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
  • TPS(TransactionPerSecond):每秒钟系统能够处理的交易或事务的数量
  • 并发连接数:某个时刻服务器所接受的请求总数

压力测试工具

ab

ab全称Apache Bench,是Apache自带的性能测试工具。使用这个工具,只须指定同时连接数、请求数以及URL,即可测试网站或网站程序的性能。

通过ab发送请求模拟多个访问者同时对某一URL地址进行访问,可以得到每秒传送字节数、每秒处理请求数、每请求处理时间等统计数据。

命令格式:

ab [options] [http://]hostname[:port]/path

常用参数如下:

-n requests 总请求数
-c concurrency 一次产生的请求数,可以理解为并发数
-t timelimit 测试所进行的最大秒数, 可以当做请求的超时时间
-p postfile 包含了需要POST的数据的文件
-T content-type POST数据所使用的Content-type头信息

更多参数请查看官方文档。

例如测试某个GET请求接口:

ab -n 10000 -c 100 -t 10 "http://127.0.0.1:8080/api/v1/posts?size=10"

测试POST请求接口:

ab -n 10000 -c 100 -t 10 -p post.json -T "application/json" "http://127.0.0.1:8080/api/v1/post"

wrk

wrk是一款开源的HTTP性能测试工具,它和上面提到的ab同属于HTTP性能测试工具,它比ab功能更加强大,可以通过编写lua脚本来支持更加复杂的测试场景。

Mac下安装:

brew install wrk

常用命令参数:

-c --conections:保持的连接数
-d --duration:压测持续时间(s)
-t --threads:使用的线程总数
-s --script:加载lua脚本
-H --header:在请求头部添加一些参数
--latency 打印详细的延迟统计信息
--timeout 请求的最大超时时间(s)

使用示例:

wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10

输出结果:

Running 30s test @ http://127.0.0.1:8080/api/v1/posts?size=10
  8 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    14.55ms    2.02ms  31.59ms   76.70%
    Req/Sec   828.16     85.69     0.97k    60.46%
  Latency Distribution
     50%   14.44ms
     75%   15.76ms
     90%   16.63ms
     99%   21.07ms
  198091 requests in 30.05s, 29.66MB read
Requests/sec:   6592.29
Transfer/sec:      0.99MB

go-wrk

go-wrk是Go语言版本的wrk,Windows同学可以使用它来测试,使用如下命令来安装go-wrk

go get github.com/adeven/go-wrk

使用方法同wrk类似,基本格式如下:

go-wrk [flags] url

常用的参数:

-H="User-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;":'\n'分隔的请求头
-c=100: 使用的最大连接数
-k=true: 是否禁用keep-alives
-i=false: if TLS security checks are disabled
-m="GET": HTTP请求方法
-n=1000: 请求总数
-t=1: 使用的线程数
-b="" HTTP请求体
-s="" 如果指定,它将计算响应中包含搜索到的字符串s的频率

执行测试:

go-wrk -t=8 -c=100 -n=10000 "http://127.0.0.1:8080/api/v1/posts?size=10"

输出结果:

==========================BENCHMARK==========================
URL:                            http://127.0.0.1:8080/api/v1/posts?size=10

Used Connections:               100
Used Threads:                   8
Total number of calls:          10000

===========================TIMINGS===========================
Total time passed:              2.74s
Avg time per request:           27.11ms
Requests per second:            3644.53
Median time per request:        26.88ms
99th percentile time:           39.16ms
Slowest time for request:       45.00ms

=============================DATA=============================
Total response body sizes:              340000
Avg response body per request:          34.00 Byte
Transfer rate per second:               123914.11 Byte/s (0.12 MByte/s)
==========================RESPONSES==========================
20X Responses:          10000   (100.00%)
30X Responses:          0       (0.00%)
40X Responses:          0       (0.00%)
50X Responses:          0       (0.00%)
Errors:                 0       (0.00%)

wrk -c400 -t8 -d40s "https://api.xxx.io/api/homecampaigns?userid=8444602914701313&status=Ended&rewardtype=All%20Rewards&pagesize=10&pagenum=1&key="
Running 40s test @ https://api.xxx.io/api/homecampaigns?userid=8444602914701313&status=Ended&rewardtype=All%20Rewards&pagesize=10&pagenum=1&key=
  8 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.09s   469.05ms   2.00s    56.74%
    Req/Sec    11.99      9.45   110.00     88.35%
  3105 requests in 40.11s, 24.77MB read
  Socket errors: connect 158, read 0, write 0, timeout 1170
Requests/sec:     77.42
Transfer/sec:    632.49KB
hanpeng@hanpeng stargate_backend % go tool pprof http://xx.xx.xx.xxx:xxxx/debug/pprof/profile
Fetching profile over HTTP from http://xx.xx.xx.xxx:xxxx/debug/pprof/profile
Saved profile in /Users/hanpeng/pprof/pprof.stargate.samples.cpu.003.pb.gz
File: stargate
Type: cpu
Time: Mar 1, 2023 at 1:02pm (CST)
Duration: 30.13s, Total samples = 7.73s (25.66%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) top
Showing nodes accounting for 4230ms, 54.72% of 7730ms total
Dropped 297 nodes (cum <= 38.65ms)
Showing top 10 nodes out of 257
      flat  flat%   sum%        cum   cum%
    1820ms 23.54% 23.54%     2110ms 27.30%  syscall.Syscall
     860ms 11.13% 34.67%      860ms 11.13%  runtime.futex
     580ms  7.50% 42.17%      580ms  7.50%  runtime.epollwait
     250ms  3.23% 45.41%      990ms 12.81%  runtime.mallocgc
     170ms  2.20% 47.61%      260ms  3.36%  runtime.heapBitsSetType
     130ms  1.68% 49.29%      130ms  1.68%  runtime.memclrNoHeapPointers
     120ms  1.55% 50.84%      120ms  1.55%  runtime.memmove
     120ms  1.55% 52.39%      120ms  1.55%  runtime.nextFreeFast (inline)
      90ms  1.16% 53.56%       90ms  1.16%  runtime.(*itabTableType).find
      90ms  1.16% 54.72%       90ms  1.16%  runtime.usleep
(pprof) pdf
Generating report in profile001.pdf

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用403bypasser绕过目标页面上的访问控制限制

关于403bypasser 403bypasser是一款自动化工具&#xff0c;该工具能够以自动化的形式实现针对目标页面的访问控制限制绕过技术。403bypasser项目目前仍处于积极开发阶段&#xff0c;并且还会增加新的功能。 该工具基于Python语言开发&#xff0c;因此具备良好的跨平台特性。 …

最好的 QML 教程,让你的代码飞起来!

想必大家都知道&#xff0c;亮哥一直深耕于 CSDN&#xff0c;坚持了好很多年&#xff0c;目前为止&#xff0c;原创已经 500 多篇了&#xff0c;一路走来相当不易。当然了&#xff0c;中间有段时间比较忙&#xff0c;没怎么更新。就拿 QML 来说&#xff0c;最早的一篇文章还是 …

基于云服务器的hexo博客搭建(稳)

文章目录序一、前置工具的准备域名购买及服务器购买二、搭建步骤1.配置服务器环境2.nginx 的配置4.git 及node.js安装1.安装node.js:2.安装Git及配置仓库1.安装git:5.本地主机配置&#xff08;这里winr &#xff0c;cmd&#xff0c;打开命令行操作&#xff09;1.安装node.js2.安…

c++11 标准模板(STL)(std::unordered_set)(十二)

定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…

【计算机二级python】综合题目

计算机二级python真题 文章目录计算机二级python真题文本文件“红楼梦. txt”中包含了《红楼梦》小说前20章内容&#xff0c;“ 停用词. txt”包含了需要排除的词语。请修改模板&#xff0c;实现以下功能。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪…

【安卓】安卓设备实现wifi display解决方案

看文章前&#xff0c;我们需要知道的几个概念&#xff1a; 1、Wifi Direct技术&#xff1b; 2、Wifi Display技术&#xff1b; 3、Miracast标准&#xff1b; 安卓手机用户都知道我们的安卓手机有一个wifi直连功能&#xff0c;在点击设置–》WIFI–》更多Wifi设置–》Wifi直连&a…

回顾2-JAVA的标识符和关键词

JAVA的标识符和关键词 标识符概念: 所有地方都需要名称 如: 类的名字>类名 如:变量的名字,方法的名字,特殊关键词语的名字 这些符号就是一种标识, 涵盖一些意思 简单理解, 就是一种标记,识别,的符号关键词 这些词语, 在JAVA程序中, 被赋予了特殊的意义, 使用时候要避开同名…

编写SPI设备驱动程序

编写SPI设备驱动程序 文章目录编写SPI设备驱动程序参考资料&#xff1a;一、 SPI驱动程序框架二、 怎么编写SPI设备驱动程序2.1 编写设备树2.2 注册spi_driver2.3 怎么发起SPI传输2.3.1 接口函数2.3.2 函数解析致谢参考资料&#xff1a; 内核头文件&#xff1a;include\linux\s…

Python实现GWO智能灰狼优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景灰狼优化算法(GWO)&#xff0c;由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优…

Shell高级——Linux中的文件描述符的本质(数组的下标)

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 前言 Linux中一切接文件&#xff0c;比如 C 源文件、视频文件、Shell脚本、可执行文件等&#xff0c;就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上…

第15天-商城系统架构,首页渲染三级分类及搭建域名访问商城

1.商城系统介绍 1.1.技术方案 前后端分离服务端模板渲染&#xff08;选择&#xff09;商品详情页面静态化改造&#xff08;优化&#xff09; 1.2.动静分离架构 2.模板引擎Thymeleaf 2.1.Thymeleaf介绍 官方文档&#xff1a;https://www.thymeleaf.org/doc/tutorials/3.0/usin…

今天,小灰37岁了!

人们常常说&#xff0c;35岁是互联网人的中年危机。现在&#xff0c;小灰已经跨过了中年危机&#xff0c;倒不是因为小灰财务自由了&#xff0c;而是因为今天是小灰37岁的生日。年轻时候&#xff0c;小灰总觉得30岁是一个很遥远的年龄&#xff0c;而现在&#xff0c;小灰距离40…

KingbaseES V8R6 运维系列 --单机小版本升级

​ 案例说明&#xff1a; 在KingbaseES V8R6版本提供了sys_upgrade的升级工具&#xff0c; 本案例描述了KingbaseES V8R6单机环境下数据库的小版本升级操作&#xff0c;案例涉及的版本从‘(Kingbase) V008R006C005B0041’通过sys_upgrade升级到‘ (Kingbase) V008R006C005B0054…

【Java】Java进阶学习笔记(四)—— 抽象类与接口

【Java】Java进阶学习笔记&#xff08;四&#xff09;—— 抽象类与接口一、抽象类1、抽象类的概念抽象类的定义格式2、抽象类的注意点抽象方法的介绍3、抽象类的具体作用4、抽象类实例二、接口&#xff08;一&#xff09;、接口的概念1、接口与类的区别2、接口特性3、抽象类和…

MyBatis 查出数据不一致 MyBatis返回数据和数据库查询不一致

MyBatis 查出数据不一致 MyBatis返回数据和数据库查询不一致 --- MyBatis查询到的数据 和 Sql 查询到的数据不一致 一、背景 近期工作中&#xff0c;遇到一个MyBatis查询数据不一致的问题&#xff0c;表现是&#xff1a; sql在数据库中查询出10条数据&#xff0c;mybatis 返回的…

【服务器数据恢复】VSAN数据迁移中断导致容量盘故障的数据恢复案例

VSAN简介&#xff1a; VSAN是以vSphere内核为基础开发&#xff0c;可以扩展使用的分布式存储架构。该架构在vSphere集群主机中安硬盘及闪存构建VSAN存储层&#xff0c;通过存储进行管理与控制&#xff0c;最终形成一个共享存储层。 VSAN数据存储是一个对象存储&#xff0c;以文…

MySQL事务的12连问

事务的12连问&#xff0c;相信大家看完肯定会有帮助的。 1. 什么是数据库事务&#xff1f; 事务&#xff0c;由一个有限的数据库操作序列构成&#xff0c;这些操作要么全部执行,要么全部不执行&#xff0c;是一个不可分割的工作单位。 假如A转账给B 100 元&#xff0c;先从A的…

windows@系统环境变量备份@注册表操作@reg命令行操作注册表

文章目录备份注册表&#x1f388;备份环境变量powershell函数从注册表文件还原命令行操作注册表更新某个key备份注册表&#x1f388; 完整的注册表备份可能达到500MB打开register editor 命令行里可以输入regedit.exe打开 可以局部备份 备份环境变量powershell函数 function …

JavaEE进阶第五课:SpringBoot的创建和使用

上篇文章介绍了Bean 作用域和生命周期&#xff0c;这篇文章我们将会介绍SpringBoot的创建和使用 目录1.为什么要学习StringBoot1.1什么是SpringBoot1.2SpringBoot的优点2.如何用Idea创建SpringBoot项目3.项目目录介绍和运行3.1输入Helloworld结尾1.为什么要学习StringBoot 在前…

Python 算法交易实验49 Step1 DataETL

说明 万丈高楼平地起 按照前面的规划&#xff0c;开始有序推进我的【15% 资金加速器】计划。这一步是通过某个源&#xff0c;获取分钟级数据&#xff0c;然后送到第一个ADBS。 Sniffer : 读取数据并发送到入队列。一开始我会把文件以离线形式上传到某个folder&#xff0c;所以…