lua 使用_wrk+lua使用记录

wrk 是一个高效的压测工具,最近需要对做的服务进行压测,记录下使用过程

安装:

1、绝大多说的UNIX系统都支持wrk, 需要操作系统支持 lua 和 openSSL, (基本上linux系统都支持)

2、直接

      git clone https://github.com/wg/wrk
      make

3、完成之后会在项目目录下生成可执行文件wrk, 后续就可以进行http压测了

简单使用

1、执行下wrk ,可以看到帮助信息

e7899535331bc171feccb9f2bd46e685.png

2、简单说明下参数

      -c  和服务器保持的TCP连接数量
      -d  压测时间
      -t  使用多少个线程压测
      -s  指定的Lua脚本位置
      -H  为每个http请求增加http请求头
      --latency  压测结束后统计延时信息
      --timeout  设置超时时间

需要注意的是,

wrk使用的异步非阻塞io并非使用线程去模拟并发连接,因此不需要设置很多的线程,一般根据cpu的核数设置即可。

-c 的参数设置必须大于-t的参数值

-c 如果设置的太大,可能导致出现too many open files 的error。 可以查看下系统的配置

cat /porc/sys/fs/file-max

3、一个例子,简单压测下百度首页的信息

    wrk -t4 -c100 -d30s --latency https://www.baidu.com/

这条命令的含义是,使用4个线程来模拟100个并发,整个压测持续30s,打印出延时统计信息. 结果如下:

6363db98f7d5a2e22c44a7033f928398.png
Socket errores 为 socket错误的数量
Requests/sec   为 每秒的请求数量,也就是并发能力
Latency        为 延迟情况及其分布

配合lua 使用

1、wrk的生命周期

对于一些动态构建的请求,例如:认证、校验、http请求参数化等,可以使用lua来复写wrk中的hook函数

调用lua分为下面三个阶段: setup、running、done

cbfe8d20574b86bbee78bc0e4c761546.png

每个阶段做的是事如下:

 setup : 线程出事后会调用一次,每个线程只调用一次
 init  : 每次请求发送之前被调用,可以接受wrk命令行的额外参数
 delay : 这个函数返回一个数值,在这次请求执行完成后延迟多长时间可以进行下一个请求,对应thinking time场景
 request : 通过这个函数可以每次请求之前修改本次请求体和Header, 这里是我们最常使用的地方,可以在这里写一些要压测的逻辑
 response: 每次请求返回后可以针对响应内容做特殊处理,例如遇到特殊情况停止测试或输出到控制台上
 done:    可以用于自定义结果报表,整个过程中只执行一次

2、wrk的全局属性

wrk = {
    scheme = "http",
    host = "localhost",
    port = nil,
    method = "GET",
    path = "/",
    headers = {},
    body = nil,
    thread = <userdata>,
}

这些全局变量可以直接拿到lua脚本中使用 是一个table类型的wrk,为全局变量,修改这个table会影响所有的请求。

3、wrk的全局方法

-- 生成整个request的string
function wrk.format(method, path, headers, body)

-- 获取域名的IP 和 Port, 返回table, 例如`{127.0.0.1:8080}`
function wrk.lookup(host, service)

-- 判断addr是否能连接, 返回 true/false
function wrk.connect(addr)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值