压力测试 - HTTP压测工具stress指南

2019.03.19重新修改(之前的使用安装方式有误!)

Stress安装指南

github地址:https://github.com/buaazp/stress

使用环境:macOS 或者 Linux (Windows用户请安装虚拟机或者Linux服务,如git工具)

编译环境:需要安装GO环境(go环境安装)

操作流程:

1. 确保安装了go服务且在Unix or unx内核系统下操作

2. 执行指令   

go get github.com/buaazp/stress

注意:执行可能会报错,如

压力测试 - HTTP压测工具stress指南_第1张图片

看下意思就知道,是perks这个代码库拉取失败,你可以直接手动在/Users/jzc/go/src/github.com/bmizerany/路径(具体路径看你自己的电脑)下使用    git clone https://github.com/bmizerany/perks, 或者再次执行指令尝试

3. 下载完代码库后我们会在我们的 GOPATH 路径下的src中,新增了文件,然后我们执行

go install github.com/buaazp/stress

完成后进行stress项目路径,如我的是

4. 执行

sh release.sh

截图:

5. 这里一共下载了四个包,其中:

linux:即Linux所使用的包

darwin:macOS所使用的包

386:32位

amd64:64位

大家选择自己需要的包解压即可,执行

//我这里使用的是macOS系统
tar zxvf stress-darwin-386.tar.gz

6. 执行 ls -l 指令查看下文件

压力测试 - HTTP压测工具stress指南_第2张图片

执行

./stress -h

出现下图说明安装成功

压力测试 - HTTP压测工具stress指南_第3张图片

Stress使用指南

安装完成后,自然是使用它来进行压测了

stress提供了两种方式,简单的说,一种就是固定速率,持续一定时间,另一种是固定的请求数,以多线程形式持续发送(时间不固定)

固定速率形式:

./stress attack -header="host:www.baidu.com" -targets=file/test.txt -rate=10 -duration=60s

多线程形式:

./stress attack -header="host:www.baidu.com" -targets=file/test.txt -c=10 -n=100

上面的rate(每秒请求数)就可以近似看为QPS,上面的例子一共发了600个请求

其中,targets是我们要请求的地址,支持GETPOST请求

你可以创建一个文件,写入   GET https://www.baidu.com

更多使用方式请参考:stress使用

执行效果:

压力测试 - HTTP压测工具stress指南_第4张图片

关于报告

stress的请求报告默认写入result.json,需要修改名称可以在请求时添加参数

./stress attack -header="host:www.baidu.com" -targets=file/test.txt -rate=10 -duration=10s -output=1.txt

已经生成的报告可以通过指令来修改格式,支持text,json,plot三种

./stress report -input=result.json -output=test.txt -reporter=text

最后

请谨慎设置请求数值。。。

请求QPS上限理论上来说取决于机器性能和操作系统文件打开数上限(文件描述符数量)

(我在我的处理器2.3 GHz Intel Core i5,内存16 GB 2133 MHz LPDDR3下,500QPS轻松无压力)

 

-----------------------------------------------------下面是未修改原文----------------------------------------------------------

对于大型项目来说,高并发高流量的场景是必然的,这种时候压力测试就非常必要,而现在的压测工具良莠不齐,而且好多的是付费的,效果也不怎么好。

这次我主要是在一个定时红包雨的活动中(该活动的接口放在一个流量比较大的模块内),由于用户的请求都是在几秒内同时发出,所以一旦用户基数过大就可能对集群的承载造成威胁,万一把集群搞挂了那我可能就要收拾行李滚蛋了。。所以为了自己安全,做个压测是必要的。

这里我使用的是gitlab上的开源工具stress,发送的是http请求,这次我使用的是POST方式施压,当然还有还有一些其他方式,具体参照https://github.com/buaazp/stress/tree/master/doc文档说明

该工具使用比较简单,选两台服务器一台作为施压,另一台被施压,然后在施压的过程中看下服务器的状态,以及nmq消息队列中的处理速度。

这边我们在gitlab上下载好工具,上传到服务器然后解压,然后运行release.sh脚本就行了,这里可能会报一些错误,应该是脚本有些命令识别不了,不过只要把工具包下载下来就没问题。

然后选择自己对应的包解压,我这次使用的是stress-darwin-amd64.tar.gz,解压完没看到新增东西,不过我们输入stress,能看到提示的话说明工具就能使用了压力测试 - HTTP压测工具stress指南_第5张图片

ok,然后写个txt里面加入我们的接口位置就可以开始压测了!

stress attack -targets=test.txt -c=100 -n=10

这里的参数具体看文档,一般自己估摸下自己的场景qps峰值能到多少,这次我估计的是到300.

不过由于用的被施压的服务器配置不行,,差点把它搞崩溃了,处理了二十多分钟才处理完所有请求

 

不过这个工具后面应该还可以完善,等自己实力更高一些再回头来钻研下

具体还有些数据大家自己压测的时候也要注意

 

 

 

 

 

这次红包雨为了防止请求数太大,采用了现将请求放到nmq中,然后再慢慢处理,其中将结果先直接返回给用户,红包的数据之后慢慢写到db里,而且为了防止用户反复发送请求,使用memorycache缓存用户的红包结果。

百度云stress工具下载,以及我的压测结果报告也在其中,仅供参考

链接:https://pan.baidu.com/s/1nwXtg8p 密码:uue1

关注微信公众号,给你好看压力测试 - HTTP压测工具stress指南_第6张图片

 

你可能感兴趣的:(工具)