wrk(1)- 详细使用

wrk 是一个类似 ab(apache bench)、jmeter 的压力测试工具,官方称它为:现代的 HTTP 基准测试工具

用 C 编写的 HTTP 协议压测工具

底层基于 epoll 和 kqueue 实现,使用了多线程和多路复用 IO(非阻塞 IO),利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量

降低测试工具本身性能开销对测试结果准确性的影响

支持使用 LuaJIT 脚本,可以执行 HTTP 请求生成、响应处理和自定义报告

 

它的定位

轻量级性能测试工具

仅支持 HTTP 协议

仅支持单机压测,多机器压测需要每个机器都手动执行一次 wrk 命令

不可取代 Jmeter、LR 等专业性能工具

 

架构&简单源码解析

wrk(1)- 详细使用

在 wrk 里面,每个线程都有自己独立的 Lua 虚拟机和 Event Loop

通过命令行参数 -c 指定的连接数,会平均分给所有线程,每个新建的 socket,都会调用 fcntl 将其设置为 NONBLOCK,即非阻塞,然后托管给 Event Loop

直接使用 redis 的 Event Loop 实现,适配了不同操作系统的实现

启动的时候,每个线程都会新建一个 Lua State,并调用 luaL_dofile 加载命令行参数 -s 指定的 lua 脚本文件

如果没有自定义的 lua 脚本,wrk 默认发送的是 HTTP 1.1 GET 请求,用长连接

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzyxdx.html