分类

安卓应用安卓游戏

网络软件 上网辅助

Vegeta(HTTP负载测试工具)

Vegeta(HTTP负载测试工具) v12.8.4官方版

大小:3.4 MB

语言:简体中文系统:WinXP, Win2003, Vista, Win7, Win8, Win10

类别:上网辅助时间:2021-01-28 21:39

Vegeta是基于Go语言的一款HTTP负载测试软件,提供恒定请求率的http服务,可以是一个命令行工具,也可以是一个库。能够设置使用CPU数量、目标的请求头、是否使用持久连接、指定初始化进程数量和要生成的报告格式等参数。

Vegeta用法介绍

-cpus int: 使用 CPU 的数量 (默认为 4 个)

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

-version: 打印版本并退出。attack command:

-body string: 指定请求主体文件里的内容。

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

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

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

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

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

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

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

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

-laddr value: 指定要使用的本地 I P地址,默认值为:0.0.0.0。

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

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

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

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

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

-targets string: 指定目标文件,默认为标准输入。

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

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

-inputs string: 指定报告输入文件,默认为标准输入。

-output string: 指定报告输出文件,默认为标准输出。

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

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

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

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

使用教程

vegeta压测http网站的静态请求

vegeta的指令主要分为这几类:

整体环境变量参数:该类参数控制主要控制压测时用多少cpu来执行任务。

攻击指令参数:该类参数主要控制请求体内容与请求速率。

报告生成参数:该类参数主要控制输出报告格式与内容。这类中主要包含了report command,encode command,plot command。

压测一个webserver的静态页面通用的命令如下:

echo "GET http://10.130.1.107" | vegeta attack -rate=19000 -duration=60s | tee houminxi.bin | vegeta report -output houminxi-result.bin

#echo "GET http://10.130.1.107"为请求体

# vegeta attack -rate=19000 -duration=60s

#vegeta的压测部分,以19000每秒的QPS(query per second)来访问目标服务器,执行时间是60s。

#tee houminxi.bin

#将vegeta的请求结果以二进制的格式保存起来。这个文件最主要的作用是如果你以后分布式执行压测,那么最后使用vegeta report统计结果的时候则需要使用每台压测机器上该文件。

#vegeta report -output houminxi-result.bin

#将本台机器上压测结束后的结果以可阅读的形式打印出来。

值得提一下的就是如果是分布式压测最后统计结果生成报告的话,应该是将每台压力机的houminxi.bin拷贝到同一台机器的相同路径下。使用vegeta report houminxi.bin houminxi-1.bin | less(记得拷贝过来将结果文件houminxi.bin重命名,以免覆盖其他机器拷贝过来结果文件。vegeta report 后面每个文件以空格的形式分开,使用less命令是万一压测请求出错。这样不至于你合成结果就是一堆错误糊脸。单台压力机中使用tee命令保存的二进制结果文件和你生成报告的文件不要重名,要不就被覆盖了。或者当你想使用分布式压测的时候不使用vegeta report命令,为了防止文件冲突。

vegeta压测https请求

echo "GET https://10.130.1.227:443" | vegeta attack -cert /root/cs/cs1.pem -key /root/cs/cs2.pem -rate=4000 -duration=60s | tee results.bin | vegeta report -output result.bin

#-cert指定的是你webserver的证书,如果你有私钥的话你也可以使用-key来指定你webserver的私钥。

另外一种你不需要在vegeta命令行中指定ssl证书的方式就是将该证书添加到你机器的根信任证书中。

cat /root/cs/cs1.pem >> /etc/pki/tls/certs/ca-bundle.crt

vegeta压测https的post请求

post请求要按照webserver所给出的格式来填写对应的路径和请求参数。vegeta提供-targets来读取你在文本内所定义的目标请求端。提供-body指定一个文件,该文件的内容将被设置为每个请求的主体,注意请求主题如果在body中指定了就不要在target的文件中指定了,否则会被target文件中的设置所覆盖。

这里我定义target.txt写入的工具目标路径如下:

POST http://10.130.2.216:8080/api/v5/micro/new/lock

定义body.josn定义携带参数如下:

{

"access_token":"",

"cts_token":"",

"en_basedata":"",

"en_data":"",

"key_id":""

}

则使用vegeta压测时的命令如下:

vegeta -cpus 24 attack -targets tatget.txt -body body.json -timeout=20s -rate 500 -duration=300s | vegeta report -output result.bin

vegeta指定QPS速率建议

既然vegeta主要是以压测QPS为主的工具,那么一台vegeta在实际压测的时候设定多少QPS合适。是不是需要加分布式来完成压测任务,成为了一个测试工程师需要考虑的因素。博主在实际测试优化nginx服务器的时候得出来的vegeta压测报告如下,仅供参考。

这里主要注意当vegeta只有一台的时候压测nginx最高只能到30000W的QPS。但是随着压力机的增多,nginx服务器所能承载的最大QPS能到13.8W。如何区分是不是需要增加压力机来满足测试呢?

在vegeta的报告中如会有请求status codes的分布。如果状态为“0”的请求分布比较多的时候,代表着这些请求没有在压力机发出整个测试就结束了。这里需要考虑有两点:

是否是被测端过饱和了导致更多的请求无法被接收到。

是否压力机太少了导致压力机产生了额定的请求速率但是没有发送出去。

这里不需要考虑测试的执行时间问题。因为压测端的请求速率是恒定的,如果说有status codes等于“0”的情况,你随着增加测试时间status codes等于“0”的个数只会越来越多。

博主使用的4核8GB内存的虚拟机来进行的压测。在这种规格的虚机下使用vegeta去压测一个静态页面时,rate指定超过3W会使虚机本身成为压力瓶颈。

失速点的状态考察

vegeta的作者都说了这个是用来做压力测试的不是做基准测试的。但是基准测试也算在压力测试里面吧。那我要做基准测试,判定系统所能处理的最大QPS在什么程度该怎么办呢?为了解决这个问题在最新版本的vegeta结果报告中第一行的表述做了一些改动。在v12.7.0的版本中结果报告里Requests增加了rate和throughput。这两个结果值的解释分别如下:

rate:在发起压测过程中vegeta实际发送的请求速率。

throughput:以服务器的角度描述成功处理请求的速度。

所以当你压测一个网络系统,如果你压测时指定的请求rate速率没有超过网络系统承载的极限。那么在vegeta压测命令中你指定的rate略大于报告结果中的rate。报告结果中的rate略大于throughput,但是两者差别不大。

如果你压测时指定的请求rate速率超过了网络系统的承载极限。那么在vegeta压测命令中你指定的rate远大于报告结果中的rate。报告结果中的rate远大于throughput。

可以看到当我用五台压力机压测15W的QPS时,测试报告实际的rate只有9W,而服务器成功正常处理的请求速率只在2.3W。这种情况就是系统的一个失速情况。15W的QPS超过了nginx服务器的处理能力。则只会有越来越多的请求在排队等待,而这种请求排队从测试数据上可以判断不是客户端数量造成的,而是服务器确实处理不完了。

更新日志

更新LICENSE中的年份范围。

修正CI徽章

设置基于Github Actions的CI (#456)

如果需要的话,添加了默认的第一个直方图桶(#532)

∨ 展开

同类推荐

相关下载

热门游戏

下载排行

热门关键字

  • 浏览器
  • 上网辅助
  • 下载工具
  • FTP工具
  • 站长工具
  • 网络共享
  • 网络辅助
  • 网络加速
  • 网络监测
  • 远程监控
  • IP工具
  • 服务器类
  • 邮件处理
  • 网页制作
  • 网络其他
  • 网络收音机