文档章节

说说压力测试工具

大数据之路
 大数据之路
发布于 2012/09/20 23:10
字数 1629
阅读 1.7K
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

系统写好了,能不能顺利上线?一般来说我们需要做一些压力测试来判断。比如系统预计每天一百万的接口访问量,并且访问时段主要集中在早八点到晚八点,那么平均下来 RPS 大约是 22 次左右,不过用户的访问量通常不会很平均,假设峰值流量是平均流量的 3 到 5 倍的话,那么我们可以推断出项目要想顺利上线,RPS 至少应该达到 66+ 次,110+ 次更好。由此可见上线前用压力测试工具测试 RPS 是一个很重要的环节。

既然压力测试工具如此重要,那么我们不妨挑几个来说说:

首先说说 ab:

ab 无疑是目前最常见的压力测试工具。其典型用法如下:

shell> ab -k -c 100 -t 10 http://domain/path

其中,参数「c」表示的是并发,参数「t」表示的是整个测试持续的时间。一个很容易被忽视的参数是「k」,它会增加请求头 Connection: Keep-Alive,相当于开启了 HTTP 长连接,这样做一方面可以降低测试服务器动态端口被耗尽的风险,另一方面也有助于给目标服务器更大的压力,测试出更接近极限的结果。

再来说说 wrk:

wrk 相对于 ab 来说最大的优点是它支持多线程,这样更容易发挥多核 CPU 的能力,从而更容易测试出系统的极限能力,其典型用法如下:

shell> wrk -c 100 -d 10 http://domain/path

其中,参数「c」表示的是并发,参数「d」表示的是整个测试持续的时间。此外,可以通过参数「t」来控制线程数(缺省值为 2),实际使用中可以视情况酌情增大。

如果顺着 ab 的使用惯性,你可能会纳闷为什么 wrk 没有类似参数「k」这样打开 HTTP 长链接的选项,这是因为 wrk 使用的是 HTTP/1.1,缺省开启的是长连接,而 ab 使用的是 HTTP/1.0,缺省开启的是短链接。

不过这也引出另一个问题,如何用 wrk 测试短链接?实际上很简单:

shell> wrk -H "Connection: Close" -c 100 -d 10 http://domain/path

也就是说通过参数「H」传递一个自定义的 Connection 请求头来关闭长链接。此外,wrk 支持自定义脚本编程,不过相对较复杂,本文略过不谈。

最后说说 locust:

locust 相对于 ab、wrk 来说最大的优点是它不再只是测试一个 url,而是可以测试一个自定义的场景,其中可以包含多个有相互关联的 url,此外,它还是分布式可扩展的,可以模拟大量用户的访问,由此可以得到更贴近真实环境的测试数据。

locust

关于 locust 的具体用法有点复杂,大家可以自行查阅官方文档

其它

除了 ab,wrk,locust 等压力测试工具之外,还有很多其它选择,其中比较有代表性的是 GoReplay 和 TcpCopy,它们的特殊之处在于可以拷贝线上服务器的真实流量并转发到测试服务器上去,也就是说,用真实流量来测试,如此得到的数据无疑是更可信的。不过它们的用法更复杂,大家记得有类似需求的时候去哪找就行了。

说了这么多压力测试工具,结尾我想说说压力测试过程中一些注意事项:首先,在使用 ab 或者 wrk 的时候,最好在同一个局域网里独立的服务器上运行它们,因为这些压力测试工具本身也会消耗系统资源,所以如果直接在目标服务器上运行它们,那么测试的结果会有偏差;其次,即便使用了长连接,那么也应该注意端口 TIME_WAIT 问题,视情况可能需要在 sysctl 配置中开启 tcp_tw_recycle 或 tcp_tw_reuse 之类的选项;最后,在压力测试过程中,最好时刻留意哪些资源成为了瓶颈,比如:CPU 是不是跑满了,IO 是不是跑满了,带宽是不是跑满了等等,如果什么都没跑满,但是压力测试结果却上不去,那么就需要反思一下是不是压力测试工具使用方法有误,或者是不是在 off-CPU 上消耗了太多时间,只有知道了瓶颈在哪,才能突破系统的极限。

#apache ab
yum install apr-util

#webench
wget http://blog.zyan.cc/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

#wrk
Modern HTTP benchmarking tool
https://github.com/wg/wrk

#gatling
Async Scala-Akka-Netty based Load Test Tool http://gatling.io
https://github.com/gatling/gatling

#sniper
A powerful & high-performance http load tester
https://github.com/btfak/sniper

#hey
HTTP load generator, ApacheBench (ab) replacement, formerly known as rakyll/boom
https://github.com/rakyll/hey

#Siege
Siege is an http load tester and benchmarking utility
https://github.com/JoeDog/siege

#http_load
http_load runs multiple http fetches in parallel, to test the throughput of a web server.
http://www.acme.com/software/http_load/

#vegeta
HTTP load testing tool and library. It’s over 9000!
https://github.com/tsenart/vegeta/

#t50
mixed packet injector tool
https://github.com/fredericopissarra/t50

#GoReplay
GoReplay is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence in code deployments, configuration changes and infrastructure changes.
https://goreplay.org
https://github.com/buger/goreplay

#tcpcopy
An online request replication tool, also a tcp stream replay tool, fit for real testing, performance testing, stability testing, stress testing, load testing, smoke testing, etc
https://github.com/session-replay-tools/tcpcopy

#gryphon
Gryphon是由网易自主研发的能够模拟千万级别并发用户的一个软件,目的是能够用较少的资源来模拟出大量并发用户,并且能够更加真实地进行压力测试, 以解决网络消息推送服务方面的压力测试的问题和传统压力测试的问题。Gryphon分为两个程序,一个运行gryphon,用来模拟用户,一个是 intercept,用来截获响应包信息给gryphon。Gryphon模拟用户的本质是用一个连接来模拟一个用户,所以有多少个连接,就有多少个用户,而用户的素材则取自于pcap抓包文件。值得注意的是,Gryphon架构类似于tcpcopy,也可以采用传统使用方式和高级使用方式。
https://github.com/wslfa/gryphon

#locust.io
An open source load testing tool.
Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
http://locust.io/

——END——

本文转载自:https://huoding.com/2017/05/31/620

大数据之路
粉丝 1636
博文 514
码字总数 328553
作品 0
武汉
架构师
私信 提问
加载中

评论(1)

fromdtor
fromdtor
文章写的很好,很用心。看得人少,回的居然没有,我感到很奇怪。真的奇怪,似乎大部分人都喜欢凑热闹。我很喜欢这种文风!顶
探讨数据库连接池性能测试方案

目的:比较各个数据库连接池的性能;对性能测试加深下理解。 背景:之前对http的应用做过性能测试,或者是压力测试。就是写好了程序,通过一些工具,如soapui,jmetter等工具做并发测试。 问题...

rkikbs
2013/05/02
985
1
测试由浅到深-jmeter如何绕过token或登录检测机制

相信很多测试工程师都在使用开源工具jmeter,jmeter可以做很多事情,接口测试,压力测试等等,此处我不多枚举。不过大家在做压力或者接口测试的时候是不是遇到过这类问题呢?就是需要登录校验...

osc_1i3i83o4
2019/09/21
5
0
APP自动化测试中Monkey和 MonkeyRunner

在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动...

fiawfo
2016/12/01
217
0
移动端应用测试技术大汇总

移动端应用测试技术大汇总 毕业后就一直从事移动端的应用测试,十多年的经验,多少有些感慨,这次把自己近年来的移动应用方面的测试经验也写下来,给大家分享。 其实测试相对来说是很简单的,...

核壳
2016/11/01
181
0
性能测试 vs 负载测试 vs 压力测试

在做一些软件测试工作时,常常会被提及性能测试、负载测试、压力测试,这也是在软件测试方面最容易混淆的三个概念。之前和一个测试大牛聊天,他和我说常常面试一些测试人员会问一些这样的问题...

osc_ll50uphu
2019/02/02
2
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 头发和不要头发,你总要选一个

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雾 缀じた街 ふたつのかげ》- Porkkana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
35
0
一道 算法题 引发的 ‘xx现场’

请 熟悉的语言 去 验证 在输入框中输入的是否是一个正确的网址 初次读题萌新有点 不知所措的样子一查 MDN 吓一跳 ----- 一个不怎么熟悉的方法跳出眼边URL() 构造函数返回一个新创建的 ...

酒窝yun过去了
今天
19
0
如何检查jQuery中是否已选中复选框? - How to check whether a checkbox is checked in jQuery?

问题: I need to check the checked property of a checkbox and perform an action based on the checked property using jQuery. 我需要检查复选框的checked属性,并使用jQuery根据check......

技术盛宴
今天
12
0
mongoose 使用

http://www.mongoosejs.net/ 编写MongoDB验证,转换和业务逻辑是非常麻烦的. 所以Mongoose应运而生了. const mongoose = require('mongoose');mongoose.connect('mongodb://localhost/te......

东东笔记
今天
30
0
微服务

什么是微服务? 使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且他们可以通过自动化的方式部署。 微服务的特征 单一职责 轻量级通信 ...

鸿FW
今天
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部