|
记得很清楚,刚开始工作的时候要对一个网页进行压测用的是ab命令,Apache自带的,该命令基本上只能支持超级简单的页面压测。今天讲讲另一款更加瑞士军刀版的工具wrk。wrk是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载。它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合在一起,这意味着我们可以用少量的线程来跟被测服务创建大量连接,进行压测,来一起实践一下。更多工作实战好文尽在公众号大话性能,敬请关注。
1、安装部署
wrk支持大多数类UNIX系统,不支持windows,安装wrk非常简单。
首先只要从github上下载wrk源码;
git clone https://github.com/wg/wrk
然后执行make命令安装;
make之后,会在项目路径下生成可执行文件wrk,随后就可以用其进行HTTP压测了。
Ps: 可以把这个可执行文件拷贝到某个已在path中的路径,比如/usr/local/bin,这样就可以在任何路径直接使用wrk了。
我是在本机mac上安装的,wrk -v即可验证是否安装成功。
2、参数说明
Wrk使用中最常用的选项命令含义解释如下。
使用方法: wrk <选项> <被测HTTP服务的URL>
常用选项:
-c, --connections 跟服务器建立并保持的TCP连接数量
-d, --duration 压测时间
-t, --threads 使用多少个线程进行压测
-s, --script 指定Lua脚本路径
-H, --header 为每一个HTTP请求添加HTTP头
--latency 在压测结束后,打印延迟统计信息
--timeout 超时时间,默认1s
一般线程数不宜过多,核数的2到4倍足够了,多了反而因为线程切换过多造成效率降低,因为wrk不是使用每个连接一个线程的模型, 而是通过异步网络io提升并发量,所以网络通信不会阻塞线程执行,这也是wrk可以用很少的线程模拟大量网路连接的原因,而现在很多性能工具并没有采用这种方式, 而是采用提高线程数来实现高并发,所以并发量一旦设的很高, 测试机自身压力就很大,测试效果反而下降。
3、简单使用
Wrk最简单的使用如下,对www.baidu.com页面进行了简单压测,不带任何请求头,请求参数。
结果说明:
一般我们最关心的几个结果指标
1、Latency: 可以理解为响应时间分布。
2、Requests/Sec: 每秒的处理请求数,可以理解为tps。
3、连接超时数目timeout。
4、高级用法
而很多实际工作中,不可能像上面那么简单的压测,我们可能需要使用POST METHOD跟服务器交互;可能需要为每一次请求使用不同的参数,以更好的模拟服务的实际使用场景等。wrk支持用户使用--script指定Lua脚本,来定制压测过程,满足个性化需求。但是也不能完全替代其他压测工具进行特别复杂的场景设计,毕竟也只是瑞士军刀而已。
在lua脚本里你可以修改 method, header, body, 可以对 response 做一下自定义的分析。接下来就讲讲get请求和post请求里面如何动态化参数。
1、get请求,请求参数uid随机生成。结果如下,每次请求uid都是不一样的。
2、post请求,发送json的body,其中age字段动态变化。
Ps:
现在 wrk 支持 lua 脚本,虽然这给了你的请求带来了无限的可能,但是这样一个强大的功能如果不谨慎使用, 会降低测试端的性能, 测试结果也受到影响。
一般修改method, header, body不会影响测试端性能, 但是操作 request, response 就要格外谨慎了。 |
|