直接用 wrk 或 ab 配合 shell 脚本即可实现自动化压测,关键在于控制并发、连接数与持续时间,并自动采集 QPS、延迟、错误率;wrk 因支持长连接、Lua 扩展和事件驱动,比 ab 更适合现代压测。

直接用 wrk 或 ab 配合 shell 脚本就能实现自动化压测,无需复杂框架。关键是控制并发、连接数、持续时间,并自动采集关键指标(如 QPS、延迟、错误率)。
选对工具:wrk 比 ab 更适合现代压测
ab(Apache Bench)简单但功能有限,不支持长连接复用、无法输出详细延迟分布;wrk 基于事件驱动,轻量高效,支持 Lua 脚本扩展,更适合模拟真实流量。
- 安装 wrk:
sudo apt install wrk(Ubuntu/Debian)或brew install wrk(macOS) - 验证 Nginx 静态服务是否就绪,例如访问
http://localhost:8080/test.jpg确保返回 200 - 压测前关闭系统 swap、调高文件描述符限制(
ulimit -n 65536),避免客户端成为瓶颈
写一个可重复执行的压测脚本
以下是一个带参数化、日志记录和基础分析的 shell 脚本示例(保存为 nginx_bench.sh):
#!/bin/bash
URL="http://localhost:8080/test.jpg"
DURATION="30s"
CONCURRENCY=(100 500 1000)
THREADS=4
<p>echo "Starting automated Nginx static file benchmark..."
for c in "${CONCURRENCY[@]}"; do
echo "=== Testing with $c concurrent connections ==="
result=$(wrk -t$THREADS -c$c -d$DURATION "$URL" 2>&1)</p><h1>提取关键指标</h1><p>qps=$(echo "$result" | grep 'Requests/sec:' | awk '{print $2}')
avg_lat=$(echo "$result" | grep 'Latency' | awk '{print $2}' | sed 's/ms//')
err_rate=$(echo "$result" | grep 'Non-2xx or 3xx responses:' | awk '{print $4}')</p><p>printf "QPS: %-8s Avg Latency: %-6sms Errors: %s\n" "$qps" "$avg_lat" "$err<em>rate"
echo "$result" >> bench</em>$(date +%s).log
done- 脚本会依次用 100/500/1000 并发发起 30 秒压测,每轮记录 QPS 和平均延迟
- 日志按时间戳保存,便于后续比对;错误率非零时需检查 Nginx error.log
- 可追加
wrk -s script.lua使用 Lua 脚本控制请求路径、Header 或动态参数
结合 Nginx 自身监控验证结果可信度
光看 wrk 输出不够,要交叉验证 Nginx 实际处理能力:
- 开启
stub_status模块(Nginx 编译需含--with-http_stub_status_module),配置:location /nginx_status { stub_status; allow 127.0.0.1; deny all; } - 压测中执行
curl http://localhost/nginx_status,观察Active connections是否稳定、Reading/Writing/Waiting比例是否合理(Waiting 应占多数) - 配合
nginx -T | grep worker_connections确认单 worker 最大连接数,避免超出限制导致 503
进阶建议:加入资源监控与阈值告警
吞吐量受限常源于系统层而非 Nginx 配置,建议压测时同步采集:
- CPU 使用率:
top -b -n 1 | grep 'Cpu(s)' | awk '{print $2}' - 内存与 swap:
free -m | awk '/Mem:/ {print $3 "/" $2 " MB"}' - Nginx worker 进程数与 RSS:
ps aux --sort=-%mem | grep nginx | head -3 - 若 QPS 不随并发线性增长,或延迟突增、错误上升,优先查系统负载、磁盘 I/O(
iostat -x 1)或网络队列(ss -s)


















