Vegeta(高性能 HTTP 负载测试工具)
为什么要了解这个东西呢?主要是针对之前已经写好的程序磁盘缓存要做压力测试,我之前写的磁盘缓存采用的是类似http协议,并不是真正的http协议,所以要对这个源码进行修改,最近读了好多别人的源代码,会有点困乏,所以对如何读和修改源代码进行了解,这里有一篇别人的经验感觉还不错有效率地阅读源码以及修改源码的技巧,万事开头难,奔跑吧少年
Vegeta是什么
Vegeta 是一个用Go语言编写的多功能的 HTTP 负载测试工具,提供命令行工具和一个开发包。 下面的用法来源于官网
Usage: vegeta [global flags] <command> [command flags]global flags:-cpus int使用CUP的数量 (默认 4 个)-profile stringEnable profiling of [cpu, heap]-version打印版本并退出attack command:-body string请求的主体文件-cert stringTLS客户PEM编码的证书文件-connections int没个目标主机最大打开闲置链接数 (默认 10000)-duration duration持续攻击时间 [0 = forever]-header value请求头-insecure忽略无效的服务器TLS证书-keepalive使用持久链接 (default true)-key stringTLS客户端PEM编码的私钥文件-laddr value本地IP地址 (default 0.0.0.0)-lazy延迟懒散的读取目标-output string输出文件 (default "stdout")-rate uint每秒请求数 (default 50)-redirects int遵循重定向的次数. -1 不会遵循重定向但会标记为成功 (默认 10)-root-certs valueTLS根证书文件 (逗号分隔列表)-targets string目标文件 (default "stdin")-timeout duration请求超时时间 (default 30s)-workers uint初始化进程数 (default 10)report command:-inputs string输入文件 (comma separated) (default "stdin")-output string输出文件 (default "stdout")-reporter string表报字符格式 [text, json, plot, hist[buckets]] (default "text")dump command:-dumper stringDumper [json, csv] (default "json")-inputs stringInput files (comma separated) (default "stdin")-output stringOutput file (default "stdout")举例:echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta reportvegeta attack -targets=targets.txt > results.binvegeta report -inputs=results.bin -reporter=json > metrics.jsoncat results.bin | vegeta report -reporter=plot > plot.htmlcat results.bin | vegeta report -reporter="hist[0,100ms,200ms,300ms]"
attack的用法
~/ vegeta attack -h
Usage of vegeta attack:-body string请求主体文件 指定文件里的内容,将被设置为请求主体去攻击目标, 查看 -targets 参数.-cert stringTLS客户PEM编码的证书文件指定PEM编码和TLS客户端证书文件用于HTTPS的请求。如果-key未指定,它会被设置为这个标志的值-connections int每个目标主机最大打开闲置链接数 (default 10000)指定每个目标主机打开的空闲连接的最大数目-duration duration持续攻击时间 [0 = forever]指定发送请求到目标主机需要多长时间. 内部结构的并发性的设置有这个值作为一个变量. 测试的实际运行时间可能比设定的时间要长,由于响应有延迟. 用0表示无限攻击.-header value请求头指定定义目标的请求头, 查看 -targets. 根据需要,可以重复指定多个请求标记-insecure忽略无效的服务器TLS证书指定是否忽略无效的服务器TLS证书。-keepalive使用持久链接 (default true)指定是否忽略无效的服务器TLS证书。-key stringTLS客户端PEM编码的私钥文件指定要使用HTTPS请求中使用的PEM编码SSL客户端证书私钥文件。-laddr value本地IP地址 (default 0.0.0.0)指定要使用的本地IP地址。-lazy延迟懒散的读取目标指定是否懒惰,而不是急切地读取输入的目标。这使得流指标纳入攻击指令,并减少内存占用。权衡是针对每个目标命中增加延迟之一。-output string输出文件 (default "stdout")指定的输出文件结果将被写入二进制. 使用管道将报告命令输入. 默认为标准输出-rate uint每秒请求数 (default 50)指定每秒钟对目标发送请求的速率,实际的请求率可能因为喜欢搜集的垃圾稍微有不同, 但总体来说它应该保持非常接近指定的速率.-redirects int遵循重定向的次数. -1 不会遵循重定向但会标记为成功 (默认 10)指定每个请求的重定向的最大次数. 默认为 10 次. 当值为 -1, 重定向不会遵循但响应标记为成功.-root-certs valueTLS根证书文件 (逗号分隔列表)指定可信的TLS 根CAs 证书文件,可用逗号分隔列表. 如果未指定,系统默认的CA证书将被使用。-targets string目标文件 (default "stdin")-timeout duration请求超时时间 (default 30s)指定每个请求的超时时间. 默认值为0,禁止超时.-workers uint初始化进程数 (default 10)指定在攻击中使用进程的初始化数量. 进程的实际数量将为了维持所要求的速率,如果有必要可以增加。
report的用法
$ vegeta report -h
Usage of vegeta report:-inputs string输入文件 (comma separated) (默认 "stdin")指定输入文件生成的报告,默认为标准输入. 这些都是 vegeta 攻击的输出内容. 你可以指定多个输出(逗号分隔),它将正在把这些报告进行合并和分类.-output string输出文件 (default "stdout")指定该报告输出的文件-reporter string报告格式 [text, json, plot, hist[buckets]] (默认 "text")指定要生成的报告类型. 默认为 文本.
dump的用法
$ vegeta dump -h
Usage of vegeta dump:-dumper stringDumper [json, csv] (default "json")指定转储格式-inputs stringInput files (comma separated) (default "stdin")指定要转储含有攻击结果的输入文件. 你可以指定多个 (逗号分隔).-output stringOutput file (default "stdout")指定把转储文件写入到输出文件中.
Usage:Distributed attacks(分布式攻击)
当进行负载测试时,不能因Vegeta自身机器的性能瓶颈限制无法达到预期结果,例如打开的文件数,内存大小, CPU 和 网络带宽, 分布式的使用Vegeta是非常好的想法。
<strong>确保 打开文件描述 和 进程限制设置得高一些,你可以在你的机器上使用 ulimit 命令</strong>
我们已准备好开始攻击(压力测试). 我们需要做的是在每个机器上执行设定的攻击速率和攻击数量,在这里我们使用 pdsh 进行并行执行.
pdsh -b -w '10.0.1.1,10.0.2.1,10.0.3.1' \'echo "GET http://target/" | vegeta attack -rate=20000 -duration=60s > result.bin'
前面的命令完成后,就可以将收集到的结果文件在我们的报表中使用
for machine in "10.0.1.1 10.0.2.1 10.0.3.1"; doscp $machine:~/result.bin $machine.bin &done
Usage (Library)
package mainimport ("fmt""time"vegeta "github.com/tsenart/vegeta/lib"
)func main() {rate := uint64(100) // per secondduration := 4 * time.Secondtargeter := vegeta.NewStaticTargeter(vegeta.Target{Method: "GET",URL: "http://localhost:9100/",})attacker := vegeta.NewAttacker()var metrics vegeta.Metricsfor res := range attacker.Attack(targeter, rate, duration) {metrics.Add(res)}metrics.Close()fmt.Printf("99th percentile: %s\n", metrics.Latencies.P99)
}
$ ulimit -n # file descriptors
2560
$ ulimit -u # processes / threads
709
分布式攻击
如果被文件描述符限制或是CPU,内存限制,我们可以采用分布式攻击,假设一个场景:我们攻击的频率是每秒60千次。我们假设我们在三台计算机上安装了vegeta程序。同时确认文件描述符和进程限制都必须设置为高数字。
做好攻击准备,我们必须分割攻击频率到每一台机器上,我们使用了pdsh来实现这个流程
pdsh -b -w '10.0.1.1,10.0.2.1,10.0.3.1' \'echo "GET http://target/" | vegeta attack -rate=20000 -duration=60s > result.bin'
上面命令执行完毕,我们要在每一台电脑拷贝他们的结果
for machine in "10.0.1.1 10.0.2.1 10.0.3.1"; doscp $machine:~/result.bin $machine.bin &done
最后使用一个report命令处理多个以逗号隔开的结果文件列表,report命令将会读取每个文件并且按照时间排序生成最终的报告 。
转载于:https://my.oschina.net/youbingchen/blog/724605
Vegeta(高性能 HTTP 负载测试工具)相关推荐
- 高性能 HTTP 负载测试工具 Vegeta
什么是 Vegeta Vegeta 是一个用 Go 语言编写的多功能的 HTTP 负载测试工具,它提供了命令行工具和一个开发库. 官方地址:https://github.com/tsenart/veg ...
- 开源网络负载测试工具-基准测试
译者注:在上一篇<开源网络负载测试工具测评>文章中,我以我微薄的翻译功底向大家展现了Ragnar Lönn先生对当前主流开源负载测试工具的一些看法.Ragnar Lönn先生主要以测试工具 ...
- 负载测试工具Ripplet
负载测试工具Ripplet Ripplet的最新版本:0.8b Ripplet特征: 1)基于Apache License 2.0许可证: 2)软件程序性能和负载测试工具: 3)有四个分布式的Java ...
- java xmpp_Java XMPP负载测试工具
java xmpp 在本文中,我们将开发用Java编写的XMPP负载测试工具. 目录 1.简介 2. XMPP负载测试工具 3.先决条件 4. LoadXmppTest Java程序 4.1. 创建一 ...
- Java XMPP负载测试工具
在本文中,我们将开发用Java编写的XMPP负载测试工具. 目录 1.简介 2. XMPP负载测试工具 3.先决条件 4. LoadXmppTest Java程序 4.1. 创建一个新的Maven项目 ...
- 如何利用负载测试工具快速进行负载测试
自动化测试工具-黑盒测试工具-功能测试工具-AutoRunner365-Alltesting泽众云测试www.alltesting.cn/jsp/newVersion2/bigNews/alltes ...
- 带您理解解负载测试怎么做及负载测试工具
负载测试是为一个应用或系统尽可能地接近成品部署并在用户群中创建的模拟环境.一个负载测试可以测量响应时间,吞吐率和资源利用率,并确定应用程序的性能瓶颈,假设性能瓶颈的出现低于负载峰值. 在这里,&quo ...
- VDI负载测试工具使用分享:Login VSI简介
Login Virtual Session Indexer(Login VSI)是目前唯一一款测试集中式桌面环境(如SBC和VDI)性能和可扩展性的行业基准工具,同时,他也是一款兼容性强,能支持大多数 ...
- python硬件测试开发_用python实现高性能测试工具(一)
做过几年开发或者测试开发的人员,时常会觉得很迷茫,新功能的开发或者老功能的维护,基本是在堆代码了.本文主要讲述在系统设计和架构方面的性能优化供大家学习, 有些内容涉及到具体产品,做了些改动或者单独写了 ...
最新文章
- excel 解析 java_java解析Excel(xls、xlsx两种格式)
- LintCode 249. 统计前面比自己小的数的个数
- php css下划线,如何自定义下划线的样式
- Python3 定时访问网页
- LINUX下简易网站压力测试--Webbench小记
- wannacry作者捉到了吗_不会阅读空气是情商低吗?如何提升自己的情商?
- python基础(part4)--语句
- opencv感兴趣通道COI的使用
- Python爬虫之pyppeteer去除Chrome正受到自动测试软件的控制(反爬策略)
- 1997年起至今的所有 WiFi 设备均易遭 Frag 攻击
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F题 Overlapping Rectangles(线段树)
- 浙大版c语言程序设计第三版邀请码,浙大版《C语言程序设计(第3版)》题目集 习题9-5 通讯录排序...
- cad画多段线时不显示轨迹_cad画多段线时不显示轨迹_CAD画多段线的时候看不到预览效果的解决方法...
- 欧路词典的词典导入教程
- 表格排版及其表格嵌套
- VBA dialogs 调用对话框
- Win10系统下怎么将普通账户设置为管理员账户
- C# winform 右下角弹窗
- 【Python成长之路】快速理解复制、浅拷贝、深拷贝
- TS+vue3 页面红色波浪线(和声明类型有关)