你的站点抗压么?推荐一款超方便的开源压测工具
作者:HelloGitHub-Anthony
这里是 HelloGitHub 推出的《讲解开源项目》系列,本期介绍一款标星 17.7k 纯 Go 语言实现的 HTTP(S) 压测工具——vegeta
> 项目地址:https://github.com/tsenart/vegeta
Vegeta 是一款用 Go 语言编写的多功能 HTTP(S) 压测工具:安装方便、功能齐全、使用简单,还可作为命令行工具或者开发库进行使用。它不仅提供了常见的压测功能,还支持格式化结果并输出为图表或动态显示当前结果。
通过本文你将掌握这款强大压测工具的基本用法,让压测只需一条命令!
一、 安装
从仓库下载编译好的二进制文件:
> https://github.com/tsenart/vegeta/releases
PC 上下载 amd64 版本即可,在 Mac Os X 上使用 Homebrew 安装:
$ brew update && brew install vegeta
如果你会 Go 语言,使用 get
自动安装:
$ go get -u github.com/tsenart/vegeta
> 如提示找不到指令,请确保 go 以及 GOBIN 在您的环境变量中
二、快速入门
> 以下指令均可以在 Linux 下运行
对于下载编译好的用户建议先将 vegeta 临时添加到 PATH 路径,方便使用:
$ cd vegeta $ export PATH=$pwd:$PATH
或者直接将 vegeta 放到 bin 目录下:
$ cd vegeta $ sudo mv vegeta /usr/local/bin/
输入 vegeta -version
后可以显示证明安装成功。
首次使用可以使用:
$ vegeta --help
来查看支持的指令和相关例子。
1. 使用例子
在命令行输入:
$ echo "GET http://127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=1s | tee results.bin | vegeta report
将会得到如图所示的结果:
这条指令前半部分的 echo "GET http://127.0.0.1:233"
表示想要测试的地址,这里我使用的是 nginx 搭建的本地服务器,vegeta attack
代表测试指令,其后 -rate
-connections
-duration
分别表示每秒钟请求次数、每个地址最大连接数、持续时间。
攻击完成后使用 tee results.bin
保存测试报告并用 veteta report
显示报告内容。
vegeta report
也支持使用 文本、JSON、直方图、hdrplot 等:
$ echo "GET http://127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=5s > results.bin
文本(默认情况)
$ vegeta report results.bin
直方图
$ vegeta report -type='hist[0,1ms,2ms,3ms,4ms]' results.bin
JSON
$ vegeta report --type json results.bin
hdrplot
$ vegeta report --type hdrplot results.bin
2.生成图形
接上一小节
的内容,我们将文字形式的报告转为图表显示,在命令行中输入:
$ vegeta plot --title HelloGitHub results.bin > plot.html
在浏览器中打开新生成的 plot.html
,即可看到图形化的测试数据:
其中 --title HelloGitHub
用来设置表头文字。此外还有
-cpu
用来设置默认使用的 cpu 核心数量,这里我默认是 12。可以使用 --threshold
flag 设定下采样阈值。
> vegeta plot 也可以将多个曲线放在一起,使用 vegeta plot result_1.bin result2_.bin ... result_n.bin > plot.html 即可
此外,配合 Go 下的 jaggr
和 jplot
可以实现动态画面输出,官方给出的指令和效果如下:
$ echo 'GET http://localhost:8080' | \ vegeta attack -rate 5000 -duration 10m | vegeta encode | \ jaggr @count=rps \ hist\[100,200,300,400,500\]:code \ p25,p50,p95:latency \ sum:bytes_in \ sum:bytes_out | \ jplot rps+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
> 由于 jplot 需要 iTerm2 但笔者没有苹果系列的电脑所以关于动态输出部分的内容大家需要自己研究。
3.使用管道
如果您了解 Shell 的管道那就不难看出,前文代码中就是使用管道将 echo "GET http:// xxx"
的输出内容传给了 vegeta
。通过管道,除了使用简单的 echo
工具,也可以使用其他任何程序的输出作为测试目标。
4.转换编码
vegeta 同样提供了编码转换功能,现在支持三种编码格式:Gob (二进制)、CSV 以及 JSON(默认) 使用 veget encode
可以做到这几种编码的相互转换:
$ echo "GET http://127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=1s > results.gob $ cat results.gob | vegeta encode | jq .
可以显示转换为 JSON 格式的测试信息,或者:
$ cat results.gob | vegeta encode --to csv --output results.csv
> 输入格式的检测是自动完成的,不需要手动进行设置。
三、结语
到这里 vegeta 的基本使用到这里就结束了,它还支持一些精细参数的设置比如证书、密钥等,但限于篇幅和笔者知识水平限制无法扩展太多,大家可以根据需要的使用 vegeta [command] --help
指令进行查看,也可以阅读官方的使用手册
> 项目地址:https://github.com/tsenart/vegeta
温馨提示:压测虽好玩但不要贪杯哦,别压起劲儿来把线上服务给压挂了!
关注 HelloGitHub 公众号 第一时间收到更新。
还有更多开源项目的介绍和宝藏项目等待你的发现。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OSChina还是不是技术人的交流社区?
离上次在OSChina上写博客已经将近6年了,当初在OSChina上分享对技术的思考和探讨开源技术,确实认识了很多同道中人。当初的OSChina和CSDN是国内两大技术社区,为什么没有选择CSDN是因为它的商业化过于严重,首页基本是广告或者其他商业实体的技术推广,这不是技术人的社区,是在获得了技术人的流量之后,出卖了作为技术社区的本质,所以那个时候我选择来了OSChina,因为这里可以真真实实的看到是一群技术人在交流,在分享自己的心得,同时也促进了很多线下交流的机会。但是今天我再次来到OSChina,我发现变了,变成了我不认识的OSChina,变成了另一个CSDN。我不知道是我落伍了,还是大家都被商业给淹没了,这个@红薯应该能够给出答案。 上面这个图和我六年前看到的是完全不一样的,六年前的博主是真的技术个人,而不是现在成了各个大厂的PR阵地,这已经不是一个开源技术社区该有的现象,因为开源的本质是发挥大众的力量参与到技术社区中来,而不是凸显某个商业公司的技术实力,以及为了给商业公司招聘去做PR的场地。这已经不是我当初看到的OSChina。 从一个社区论坛的这6年变化,也就不难发现...
- 下一篇
监控nginx.conf配置文件,配置文件修改自动重启nginx
1.1 实现目标 在学习或者进行nginx测试的时候,耗费在 nginx -s reload/stop 上的命令时间很多,修改任意内容都需要重新启动或者停止启动,基本上状态就是在下面5个状态间来回切换 vim nginx.conf 修改nginx.conf 保存nginx.conf 重启nginx 刷新浏览器... 重启的这个时间其实我们可以用来做更多事情,比如更专注于内容而不是停止、重启,一般程序员不喜欢重复的东西 我们可以简化重启这一步骤,实现nginx.conf有任何修改就自动重启nginx,实现自动加载 下面我们就手摸手来实现nginx配置文件修改自动加载 【注意】:以下所有操作均基于Linux(centos7)版本,不适用于windows 1.2 技术难度 技术难度:★★ 原理难度:★ 二、技术实现 2.1 所需技术 Linux基本命令知识 Linux Shell编程知识 2.2 技术原理 配置文件有修改,那么配置文件的修改时间一定会改变 那么我们可以记录修改时间,如果当前文件的修改时间和上次记录的修改时间不一致,绝壁是修改了配置文件,这个时候我们就可以执行nginx的重启命...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7设置SWAP分区,小内存服务器的救世主
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块