littlebot
Published on 2025-04-07 / 0 Visits
0

【源码】基于C语言的HTTP基准测试工具

项目简介

本项目是基于 wrk 修改而来的 HTTP 基准测试工具 wrk2,当前处于实验/开发阶段,未来可能会合并到 wrk 中。它结合多线程设计与可扩展的事件通知系统(如 epoll 和 kqueue),能在单多核 CPU 上产生显著负载,可产生恒定吞吐量负载,并准确记录高百分比(如 99.9999%)的延迟详情。

项目的主要特性和功能

  1. 可通过--rate-R参数指定每秒的总请求数,默认值为 1000,实现恒定吞吐量负载生成。
  2. 使用 HdrHistograms 替代单个请求样本缓冲区,从请求“计划”发送的时间点开始计算响应延迟,避免协调遗漏问题,使延迟报告更准确。
  3. 提供公共 Lua API,可用于生成 HTTP 请求、处理响应和自定义报告。
  4. 使用--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】