性能测试工具 wrk

一、简介

  WRK 是一款针对HTTP基准测试工具,即使在单个多核CPU上运行时,也能够对目标机器产生大量负载。原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等。其实它是复用了 redis 的 ae 异步事件驱动框架。说说 wrk 的优缺点吧:

优点:单机并发能力强,极少的线程数即可模拟大量的并发请求。

缺点:不支持分布式,对于上万用户的并发测试显得力不从心。lua 脚本学习成本较高。

 

二、安装

 执行以下命令:

git clone https://github.com/wg/wrk.git
cd wrk
make
cp wrk /usr/local/bin           # 将可执行文件移动到 /usr/local/bin ,方便调用

 输入 wrk -v 检查安装是否成功

性能测试工具 wrk_第1张图片

 

三、测试

 一、get 请求

 执行命令:

wrk -t12 -c100 -d10s --timeout=30s --latency https://www.baidu.com

 这条压测命令代表:12个线程 100个 tcp 持续对 https://www.baidu.com 压测10s,超时时间为30s

 

压测结果:

性能测试工具 wrk_第2张图片

 wrk 各项参数详解:

-c, --connections       # tcp 连接数
-d, --duration          # 压测持续时间
-t, --threads           # 线程数
-s, --script            # 指定 lua 脚本
-H, --header            # 为每个HTTP请求添加 hearder
     --latency          # 压测结束后,打印延时统计信息
     --timeout          # 超时时间
-v, --version           # 打印 wrk 详细信息 

 

 注意:线程数不易设置的过高,官方建议一般为 CPU 核心数的2到4倍最佳,高了会因频繁切换线程而降低效率。wrk 不是一个连接对应一个线程的模型,而是通过异步网络 io 提升并发量,也就说是一个线程能管理创建多个 tcp 连接。这就是 wrk 为什么足够轻量级,但却可以模拟出大量 tcp 连接的原因。

 

二、 post 请求

 wrk 支持 lua, post 请求压测需要借助 lua 脚本,编写脚本,保存 .lua 格式文件

wrk.method = "POST"

wrk.headers["Content-Type"] = "application/json"

# 需要传的参数
wrk.body = ""

执行压测命令:

wrk -t2 -c10 -d5s --timeout=30s --latency  -s post.lua https://xxx.xxx.xxx

 

压测结果:

性能测试工具 wrk_第3张图片

 

你可能感兴趣的:(性能测试工具 wrk)