2019.03.19重新修改(之前的使用安装方式有误!)
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
注意:执行可能会报错,如
看下意思就知道,是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 指令查看下文件
执行
./stress -h
出现下图说明安装成功
安装完成后,自然是使用它来进行压测了
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是我们要请求的地址,支持GET和POST请求
你可以创建一个文件,写入 GET https://www.baidu.com
更多使用方式请参考:stress使用
执行效果:
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,能看到提示的话说明工具就能使用了
ok,然后写个txt里面加入我们的接口位置就可以开始压测了!
stress attack -targets=test.txt -c=100 -n=10
这里的参数具体看文档,一般自己估摸下自己的场景qps峰值能到多少,这次我估计的是到300.
不过由于用的被施压的服务器配置不行,,差点把它搞崩溃了,处理了二十多分钟才处理完所有请求
不过这个工具后面应该还可以完善,等自己实力更高一些再回头来钻研下
具体还有些数据大家自己压测的时候也要注意
这次红包雨为了防止请求数太大,采用了现将请求放到nmq中,然后再慢慢处理,其中将结果先直接返回给用户,红包的数据之后慢慢写到db里,而且为了防止用户反复发送请求,使用memorycache缓存用户的红包结果。
百度云stress工具下载,以及我的压测结果报告也在其中,仅供参考
链接:https://pan.baidu.com/s/1nwXtg8p 密码:uue1