项目简介
本项目是基于 wrk 修改而来的 HTTP 基准测试工具 wrk2,当前处于实验/开发阶段,未来可能会合并到 wrk 中。它结合多线程设计与可扩展的事件通知系统(如 epoll 和 kqueue),能在单多核 CPU 上产生显著负载,可产生恒定吞吐量负载,并准确记录高百分比(如 99.9999%)的延迟详情。
项目的主要特性和功能
- 可通过
--rate
或-R
参数指定每秒的总请求数,默认值为 1000,实现恒定吞吐量负载生成。 - 使用 HdrHistograms 替代单个请求样本缓冲区,从请求“计划”发送的时间点开始计算响应延迟,避免协调遗漏问题,使延迟报告更准确。
- 提供公共 Lua API,可用于生成 HTTP 请求、处理响应和自定义报告。
- 使用
--latency
标志可提供详细的延迟百分比信息,使用--u_latency
标志可对比校正和未校正的延迟分布。
安装使用步骤
假设用户已经下载了本项目的源码文件,可按以下步骤进行操作:
基本使用
运行基准测试的命令示例如下:
bash
wrk -t2 -c100 -d30s -R2000 http://127.0.0.1:8080/index.html
此命令将使用 2 个线程,保持 100 个 HTTP 连接打开,以每秒 2000 个请求的恒定吞吐量运行 30 秒的基准测试。
若要获取详细的延迟百分比信息,可使用--latency
标志:
bash
wrk -t2 -c100 -d30s -R2000 --latency http://127.0.0.1:80/index.html
脚本使用
可使用 Lua 脚本进行自定义操作。wrk 的公共 Lua API 如下: ```lua init = function(args) request = function() response = function(status, headers, body) done = function(summary, latency, requests)
wrk = { scheme = "http", host = "localhost", port = nil, method = "GET", path = "/", headers = {}, body = nil }
function wrk.format(method, path, headers, body)
``
脚本参数需用
--与 wrk 参数分隔,若脚本重写了
init()但未重写
request(),则必须调用
wrk.init()`。
基准测试提示
- 运行 wrk 的机器需有足够的临时端口,且应快速回收关闭的套接字。
- 服务器的
listen(2)
积压队列应大于测试的并发连接数。 - 仅更改 HTTP 方法、路径、添加头或正文的用户脚本对性能无影响;若需多个 HTTP 请求,应预先生成并通过
request()
调用快速查找返回。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】