Skip to main content

环境要求

执行前先编译 Arc:

HTTP/1.1 基准

测试流程

  1. 启动 http_ok_backend.py(最小 Python HTTP 服务)
  2. 启动 arc-gatewaynginx,并都指向该后端
  3. 先执行 1 轮预热,再各执行 RUNSwrk 测量
  4. 解析结果并输出 summary.jsonsummary.md

默认参数

可通过环境变量覆盖:

HTTP/2 基准

该脚本使用 h2load(而不是 wrk)。会自动生成一套 RSA-2048 自签证书,并同时给 Arc 与 Nginx 使用。二者都做 TLS 终止,后端仍是明文 HTTP/1.1。

默认参数


结果产物

每次运行会在 benchmark/results/ 下生成时间戳目录:
env.txt 会记录:

结果解读

summary.json 会给出各测试对象跨轮次聚合统计:
summary.md 是同一结果的表格视图,便于共享。 发布对比结论时建议统一使用中位数(median)。只要同时存在 arcnginx 测试结果,就会自动生成 compare 区块。

可复现性清单

  • 固定测试机器规格与内核版本(建议 Linux ≥ 6.1)
  • 固定 Arc 与 Nginx 构建版本(env.txt 会记录 commit)
  • 至少执行 5 轮(RUNS=5)且参数保持一致
  • 对外发布结论使用 median
  • 保留所有 *_runN.txt 原始文件
  • Arc 数据平面依赖 Linux io_uring,请在 WSL2 或原生 Linux 上测,不要在 macOS 上直接测
  • 为降低波动,建议关闭动态频率:cpupower frequency-set -g performance

测试后端

benchmark/backends/http_ok_backend.py 是一个最小 ThreadingHTTPServer,返回固定大小响应,支持 GETPOSTPUTDELETEHEAD 模拟更真实的响应体大小:

故障排查

安装缺失工具。Ubuntu/Debian 可用 apt install wrk 安装 wrk,apt install nghttp2-client 安装 h2load。安装后用 wrk --versionh2load --version 检查版本。
表示测试中出现了非 2xx/3xx 响应。常见原因是 Arc/Nginx 配置错误、误触发限流、或后端未正常运行。请优先看输出目录里的 backend.logarc.err.log。仅在排障时才建议 REQUIRE_ZERO_NON2XX=0
CPU 动态频率是常见原因。可执行:
并检查是否有后台进程抢占 CPU。发布结论时请使用 summary.json 的中位数而非均值。
H2 脚本默认使用自签证书。若 h2load 拒绝证书,请确认该版本使用的 TLS 跳过参数。脚本会自动探测 --insecure--no-verify-peer-k,若全部不兼容,请按实际版本补充脚本探测逻辑。
脚本会在安全范围内随机分配端口。若仍冲突,请终止占用进程后重试,脚本会重新分配端口。