Wrk HTTP 性能基准测试教程

wrk 是一款现代化的 HTTP 基准测试工具,基于多线程和事件驱动模型,能够以极少的系统资源产生大量并发请求。相比 Apache Bench(ab),wrk 的测试结果更加准确可靠。本文将介绍如何在搬瓦工 VPS 上安装和使用 wrk 来测试 Web 应用的性能极限。

一、安装 wrk

1.1 从源码编译安装

# 安装编译依赖
apt update
apt install build-essential libssl-dev git -y

# 克隆源码
git clone https://github.com/wg/wrk.git
cd wrk

# 编译
make -j$(nproc)

# 安装到系统路径
cp wrk /usr/local/bin/

# 验证安装
wrk --version

1.2 包管理器安装

# Ubuntu(可能不是最新版本)
apt install wrk -y

# 使用 snap
snap install wrk

二、基础使用

2.1 命令语法

# 基本格式
wrk -t[线程数] -c[连接数] -d[持续时间] [URL]

# 示例:2 个线程,100 个连接,持续 30 秒
wrk -t2 -c100 -d30s http://localhost/

# 更详细的输出(包含延迟分布)
wrk -t2 -c100 -d30s --latency http://localhost/

2.2 参数说明

  • -t:线程数,建议设为 CPU 核心数的 1-2 倍。
  • -c:并发连接数,每个线程处理 c/t 个连接。
  • -d:测试持续时间,支持 s(秒)、m(分)、h(小时)。
  • --latency:输出详细的延迟百分位统计。
  • -s:指定 Lua 脚本。
  • -H:添加 HTTP 请求头。

三、测试示例

3.1 测试静态页面

# 测试 Nginx 静态文件性能
wrk -t4 -c200 -d60s --latency http://localhost/index.html

输出结果解读:

  • Requests/sec:每秒处理的请求数(QPS),是最核心的性能指标。
  • Transfer/sec:每秒传输的数据量。
  • Latency Avg:平均延迟。
  • Latency 99%:99% 的请求在此时间内完成(P99 延迟)。
  • Socket errors:连接、读写、超时错误数量。

3.2 测试 API 接口

# 带自定义请求头测试
wrk -t2 -c50 -d30s -H "Authorization: Bearer your-token" \
  -H "Content-Type: application/json" \
  http://localhost:8080/api/users

3.3 递增负载测试

# 使用脚本递增连接数测试
for c in 10 50 100 200 500 1000; do
  echo "=== Connections: $c ==="
  wrk -t2 -c$c -d15s --latency http://localhost/
  sleep 2
done

四、Lua 脚本高级用法

wrk 支持通过 Lua 脚本自定义请求内容,实现 POST 请求、动态参数等功能。

4.1 POST 请求

cat > post.lua <<'EOF'
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = '{"username":"testuser","email":"test@example.com"}'
EOF

wrk -t2 -c100 -d30s -s post.lua http://localhost:8080/api/register

4.2 动态请求参数

cat > dynamic.lua <<'EOF'
counter = 0

request = function()
  counter = counter + 1
  local path = "/api/users/" .. (counter % 1000)
  return wrk.format("GET", path)
end
EOF

wrk -t2 -c100 -d30s -s dynamic.lua http://localhost:8080

4.3 自定义响应统计

cat > report.lua <<'EOF'
done = function(summary, latency, requests)
  io.write("--- Custom Report ---\n")
  io.write(string.format("Total requests: %d\n", summary.requests))
  io.write(string.format("Total errors:   %d\n", summary.errors.status))
  io.write(string.format("Avg latency:    %.2f ms\n", latency.mean / 1000))
  io.write(string.format("P50 latency:    %.2f ms\n", latency:percentile(50) / 1000))
  io.write(string.format("P95 latency:    %.2f ms\n", latency:percentile(95) / 1000))
  io.write(string.format("P99 latency:    %.2f ms\n", latency:percentile(99) / 1000))
end
EOF

wrk -t2 -c100 -d30s -s report.lua http://localhost/

五、测试结果分析与优化

根据 wrk 测试结果,可以针对性地进行优化:

  • QPS 低:检查服务端配置(如 Nginx worker 数量、连接限制)和应用代码瓶颈。
  • 延迟高:排查数据库查询、外部 API 调用等慢操作。
  • Socket 错误多:调整系统文件描述符限制和 TCP 参数,参考 内核调优指南
  • Transfer/sec 低:检查带宽限制和响应压缩配置。

配合系统监控分析

# 在测试期间监控系统资源
# 终端1: 运行 wrk
wrk -t4 -c200 -d60s --latency http://localhost/

# 终端2: 监控 CPU 和内存
vmstat 1

# 终端3: 监控网络
sar -n DEV 1

# 终端4: 监控磁盘 I/O
iostat -x 1

六、与其他测试工具对比

  • wrk:轻量高效,适合快速基准测试和压力测试。
  • ab(Apache Bench):简单易用但功能有限,单线程性能较差。
  • k6:功能强大的现代测试工具,适合复杂场景,参考 K6 教程
  • Locust:Python 编写测试脚本,适合模拟真实用户行为,参考 Locust 教程

总结

wrk 是评估搬瓦工 VPS 上 Web 应用性能的利器,简洁的命令行界面和 Lua 脚本扩展让它既适合快速测试也能应对复杂场景。测试前建议先完成 内核参数调优,测试后可以使用 Perf火焰图 进行深入的性能分析。选购搬瓦工 VPS 请查看 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 访问官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。