1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 高性能 HTTP 负载测试工具 Vegeta

高性能 HTTP 负载测试工具 Vegeta

时间:2023-06-28 01:06:04

相关推荐

高性能 HTTP 负载测试工具 Vegeta

什么是 Vegeta

Vegeta 是一个用 Go 语言编写的多功能的 HTTP 负载测试工具,它提供了命令行工具和一个开发库。

官方地址:/tsenart/vegeta

安装 Vegeta

Vegeta 安装非常简单,由于 Go 语言良好的跨平台性,可以直接下载官方的预编译版本后开箱即用。

预编译版本 这里以 Linux 版本为例:

$wget/tsenart/vegeta/releases/download/v7.0.3/vegeta-7.0.3-linux-amd64.tar.gz

$tarxzvfvegeta-7.0.3-linux-amd64.tar.gz

$mvvegeta/usr/local/bin/

如果你使用的是其它平台,可根据实际情况在官网下载页面下载对应版本解压后就可以使用。

macOS

$brewinstallvegeta

Vegeta 用法

$vegeta--help

Usage:vegeta[globalflags]<command>[commandflags]

globalflags:

-cpusint

使用CPU的数量(默认为4个)

-profilestring

指定在执行期间启用哪个分析器,支持cpu和heap。

-version

打印版本并退出。

attackcommand:

-bodystring

指定请求主体文件里的内容。

-certstring

指定用于HTTPS请求的PEM格式的客户端证书文件。如果-key未指定,它会被设置为这个标志的值。

-connectionsint

指定每个目标主机打开的空闲连接的最大数目,默认值为10000。

-durationduration

指定发送请求到目标主机的时长,用0表示永久。

-headervalue

指定目标的请求头,可以重复指定多个请求头。

-http2

指定是否向支持的服务器发送HTTP/2请求,默认为:true。

-insecure

指定是否忽略无效的服务器TLS证书。

-keepalive

指定是否使用持久链接,默认值为:true。

-keystring

指定HTTPS请求中使用的PEM编码的SSL客户端证书私钥文件。

-laddrvalue

指定要使用的本地IP地址,默认值为:0.0.0.0。

-lazy

指定是否使用延迟模式读取目标。

-outputstring

指定输出文件的位置,默认为标准输出。

-rateuint

指定每秒钟对目标发送的请求数,默认值为:50。

-redirectsint

指定每个请求的重定向的最大次数,默认为10次。当值为-1,不会遵循重定向但响应标记为成功。

-root-certsvalue

指定可信的TLS根证书文件,多个的情况下使用逗号分隔。如果未指定,使用系统默认的CA证书。

-targetsstring

指定目标文件,默认为标准输入。

-timeoutduration

指定每个请求的超时时间,默认值为30s。

-workersuint

指定初始化进程数量,默认值为10。

reportcommand:

-inputsstring

指定报告输入文件,默认为标准输入。

-outputstring

指定报告输出文件,默认为标准输出。

-reporterstring

指定要生成的报告的格式,支持text,json,plot,hist[buckets]。默认为文本。

dumpcommand:

-dumperstring

指定转存文件,支持json,csv格式。默认为json格式。

-inputsstring

指定要转存的输入文件,默认为标准输入,指定多个用逗号分隔。

-outputstring

指定要转存的输出文件,默认为标准输出。

Vegeta 使用实例

使用标准输入进行压测并生成报告

$echo"GEThttp://www.hi-/img/linux/docker-dry-01.png"|vegetaattack-rate=50-connections=1-duration=1s|teeresults.bin|vegetareport

Requests[total,rate]50,51.02

Duration[total,attack,wait]37.41975091s,979.999689ms,36.439751221s

Latencies[mean,50,95,99,max]33.816664905s,35.021110945s,37.058121168s,37.204824958s,37.319751221s

BytesIn[total,mean]9505000,190100.00

BytesOut[total,mean]0,0.00

Success[ratio]100.00%

StatusCodes[code:count]200:50

ErrorSet:

使用目标文件的内容进行压测

创建 target.txt 文件,内容如下:

$vimtarget.txt

GEThttp://www.hi-/

GEThttp://www.hi-/posts/19779.html

GEThttp://www.hi-/img/linux/docker-dry-01.png

使用 Vegeta 进行压测

$vegetaattack-targets="target.txt"-rate=10-duration=2s>results.bin

自定义目标文件 除了前面定义的最简单 HTTP GET 请求外,你还可以定义下面这些更灵活更复杂的 HTTP 请求:

自定义请求头

GEThttp://user:password@hi-:80/path/to

X-Account-ID:8675309

DELETEhttp://hi-:80/path/to/remove

Confirmation-Token:90215

Authorization:TokenDEADBEEF

2.自定义请求的主体

POSThttp://hi-:80/things

@/path/to/newthing.json

PATCHhttp://hi-:80/thing/71988591

@/path/to/thing-71988591.json

自定义请求头和请求主体

POSThttp://hi-:80/things

X-Account-ID:99

@/path/to/newthing.json

生成压测报告

生成 JSON 格式的压测报告

$vegetareport-inputs=results.bin-reporter=json>metrics.json

生成基于 Dygraphs 的 HTML 5 压测报告

$catresults.bin|vegetareport-reporter=plot>plot.html

计算并输出一个基于文本的直方图

$catresults.bin|vegetareport-reporter="hist[0,2ms,4ms,6ms]"

Bucket#%Histogram

[0,2ms]600732.65%########################

[2ms,4ms]550529.92%######################

[4ms,6ms]211711.51%########

[6ms,+Inf]477125.93%###################

生成实时图形压测报告

如果您是 iTerm 用户,可以使用 jaggr 将 Vegeta 与 jplot 整合在一起并在终端上实时绘制压测报告。要实现这个功能你首先需要先安装 jaggr 和 jplot:

安装 jaggr

#macOS

$brewinstallrs/tap/jaggr

#源代码安装

$goget-/rs/jaggr

安装 jplot

#macOS

$brewinstallrs/tap/jplot

#源代码安装

goget-/rs/jplot

安装完 jaggr 和 jplot 后,其次你需要在 iTerm 中执行以下命令:

$echo'GEThttp://www.hi-'|\

vegetaattack-rate50-duration5m|vegetadump|\

jaggr@count=rps\

hist\[100,200,300,400,500\]:code\

p25,p50,p95:latency\

sum:bytes_in\

sum:bytes_out|\

jplotrps+code.hist.100+code.hist.200+code.hist.300+code.hist.400+code.hist.500\

latency.p95+latency.p50+latency.p25\

bytes_in.sum+bytes_out.sum

分布式压力测试

当进行大规模负载测试时,通常由于受限于 Vegeta 自身机器的性能瓶颈(比如:打开的文件数,内存大小,CPU 和 网络带宽)限制而无法达到预期结果。 这时分布式的使用 Vegeta 可以很好的解决这个问题,实现类似功能的工具很多,比如功能强大的 Ansible。这里我们使用 Pdsh 来实现:

$pdsh-b-w'10.0.1.1,10.0.2.1,10.0.3.1'\

'echo"GEThttp://target/"|vegetaattack-rate=20000-duration=60s>result.bin'

Pdsh 的全称是 (Parallel Distributed Shell),Pdsh 可并行的执行对目标主机的操作,很方便的批量执行命令和分发任务。Pdsh 还支持交互模式,当要执行的命令不确定时,可直接进入 Pdsh命令行,非常方便。

完成前面的命令后,我们就可以通过 Shell 脚本将结果文件收集到的一起供后面生成报表时使用。

$formachinein"10.0.1.110.0.2.110.0.3.1";do

scp$machine:~/result.bin$machine.bin&

done

最后我们可以通过 vegeta report 命令生成此次压测的报表。vegeta report 命令可一次性读取使用逗号分隔的多个结果文件并生成报告,默认通过时间戳进行排序。

$vegetareport-inputs="10.0.1.1.bin,10.0.2.1.bin,10.0.3.1.bin"

Requests[total,rate]3600000,60000.00

Latencies[mean,95,99,max]223.340085ms,326.913687ms,416.537743ms,7.788103259s

BytesIn[total,mean]3714690,3095.57

BytesOut[total,mean]0,0.00

Success[ratio]100.0%

StatusCodes[code:count]200:3600000

ErrorSet:

其它相关

如果你觉得命令行下使用 Vegeta 比较复杂的话,你还可以使用 Alex 项目。Alex 是一个基于 Vegeta Library 和 Boom 封装的压力测试 Web UI,Vegeta 提供稳定的 QPS 压力源,Boom 提供稳定的并发数压力源。

项目地址:/ireaderlab/alex

Alex 架构图

Alex 效果图

参考文档

/RBqHjIu

/zQ104Zp

/R5spIPf

原文地址 https://www.hi-/posts/4650.html

关注 golang技术实验室 获取更多好文

本文由 mdnice 多平台发布

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。