huton_0306 发表于 2018-8-23 11:14:12

一款适合性能基线测试的小工具

记得很清楚,刚开始工作的时候要对一个网页进行压测用的是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 就要格外谨慎了。

huton_0306 发表于 2018-9-21 10:03:38

顶一下

Miss_love 发表于 2020-12-29 09:38:19

支持分享
页: [1]
查看完整版本: 一款适合性能基线测试的小工具