广告位联系
返回顶部
分享到

HTTP服务压力测试工具及相关术语介绍

Golang 来源:互联网 作者:秩名 发布时间:2022-04-16 19:52:39 人浏览
摘要

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

前言

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

压测相关术语

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

压力测试工具

ab

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

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

命令格式:

1

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

常用参数如下:

1

2

3

4

5

-n requests 总请求数

-c concurrency 一次产生的请求数,可以理解为并发数

-t timelimit 测试所进行的最大秒数, 可以当做请求的超时时间

-p postfile 包含了需要POST的数据的文件

-T content-type POST数据所使用的Content-type头信息

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

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

1

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

测试POST请求接口:

1

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下安装:

1

brew install wrk

常用命令参数:

1

2

3

4

5

6

7

-c --conections:保持的连接数

-d --duration:压测持续时间(s)

-t --threads:使用的线程总数

-s --script:加载lua脚本

-H --header:在请求头部添加一些参数

--latency 打印详细的延迟统计信息

--timeout 请求的最大超时时间(s)

使用示例:

1

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

输出结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

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:

1

go get github.com/adeven/go-wrk

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

1

go-wrk [flags] url

常用的参数:

1

2

3

4

5

6

7

8

9

-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的频率

执行测试:

1

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

输出结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

==========================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%)


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://www.cnblogs.com/guyouyin123/p/14582577.html
相关文章
  • 基于GORM实现CreateOrUpdate的方法
    CreateOrUpdate 是业务开发中很常见的场景,我们支持用户对某个业务实体进行创建/配置。希望实现的 repository 接口要达到以下两个要求: 如果
  • Golang中的内存逃逸的介绍
    什么是内存逃逸分析 内存逃逸分析是go的编译器在编译期间,根据变量的类型和作用域,确定变量是堆上还是栈上 简单说就是编译器在编译
  • Golang自旋锁的介绍
    自旋锁 获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。 它是为实现保护共享资源而提出的
  • Go语言读写锁RWMutex的源码

    Go语言读写锁RWMutex的源码
    在前面两篇文章中初见 Go Mutex、Go Mutex 源码详解,我们学习了Go语言中的Mutex,它是一把互斥锁,每次只允许一个goroutine进入临界区,可以保
  • Go项目实现优雅关机与平滑重启功能
    什么是优雅关机? 优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对
  • Go语言操作Excel利器之excelize类库的介绍
    在开发中一些需求需要通过程序操作excel文档,例如导出excel、导入excel、向excel文档中插入图片、表格和图表等信息,使用Excelize就可以方便
  • 利用Go语言快速实现一个极简任务调度系统

    利用Go语言快速实现一个极简任务调度系统
    任务调度(Task Scheduling)是很多软件系统中的重要组成部分,字面上的意思是按照一定要求分配运行一些通常时间较长的脚本或程序。在爬
  • GoLang中的iface 和 eface 的区别介绍

    GoLang中的iface 和 eface 的区别介绍
    GoLang之iface 和 eface 的区别是什么? iface和eface都是 Go 中描述接口的底层结构体,区别在于iface描述的接口包含方法,而eface则是不包含任何方
  • Golang接口使用的教程
    go语言并没有面向对象的相关概念,go语言提到的接口和java、c++等语言提到的接口不同,它不会显示的说明实现了接口,没有继承、子类、
  • go colly 爬虫实现示例介绍
    贡献某CC,go源码爬虫一个,基于colly,效果是根据输入的浏览器cookie及excel必要行列号,从excel中读取公司名称,查询公司法人及电话号码。
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计