nginx静态资源qps测试需聚焦真实路径的有效请求速率,推荐wrk压测、日志聚合、stub_status采样及prometheus持续观测四种方法。

测试 Nginx 静态资源服务器的每秒查询率(QPS),关键在于**在真实请求路径上施加可控并发压力,并准确统计单位时间内的成功请求数**。不能只看连接数或日志总量,而要聚焦“静态资源响应完成”的有效请求速率。
用 wrk 或 ab 做定向压测(推荐 wrk)
wrk 支持高并发、低开销,且能精准控制请求路径和静态文件类型,比 ab 更适合现代静态服务压测:
- 确保被测静态资源存在且可公开访问,例如:
/static/app.js、/images/logo.png - 运行命令示例(100 并发、持续 30 秒、复用连接):
wrk -t4 -c100 -d30s --latency http://your-domain/static/app.js - 结果中重点关注 Requests/sec(即 QPS)和 Latency Distribution 中 90% 以下延迟值
- 多次测试不同文件大小(1KB / 100KB / 1MB)和不同并发等级(50/200/500),观察 QPS 是否线性增长或出现拐点
从 access 日志反推历史 QPS(适用于已有流量)
若无法主动压测,可分析真实访问日志,按秒聚合静态资源请求:
- 先筛选出静态资源请求(如 JS/CSS/PNG 等):
grep -E '.(js|css|png|jpg|gif|woff2?|ttf|svg)$' /var/log/nginx/access.log - 提取每行时间戳中的秒级字段(假设日志格式含
[dd/MMM/yyyy:HH:MM:SS):awk -F'[:\]]' '{print $2":"$3":"$4}' | sort | uniq -c | sort -nr | head -20 - 输出类似
142 10:23:45表示该秒有 142 次静态资源请求 → 当前峰值 QPS ≈ 142 - 注意:此方法反映的是自然流量,非服务能力上限;需排除爬虫、CDN 预热等干扰请求
用 stub_status 实时估算瞬时 QPS(轻量监控)
启用 stub_status 后,可通过短间隔采样 requests 计数差来估算当前 QPS:
- 配置 location:
location /nginx-status { stub_status; allow 127.0.0.1; deny all; } - 执行两次采样(间隔 1 秒):
curl -s http://localhost/nginx-status | awk 'NR==3 {print $3}' - 若第一次得 123456,第二次得 123589,则 QPS ≈ 133
- 该值是全局请求总 QPS,包含动态请求;如需纯静态 QPS,需结合自定义日志或 map 指令预标记
结合 Prometheus 实现持续 QPS 观测(生产推荐)
部署 nginx-prometheus-exporter,它会自动抓取 stub_status 并暴露指标:
- 指标
nginx_http_requests_total{job="nginx"}可用于计算平滑 QPS:rate(nginx_http_requests_total[1m]) - 配合
map指令标记静态请求:map $request_uri $is_static { ~*.(js|css|png|jpg)$ "1"; default "0"; }
再在 exporter 中按标签过滤,即可分离出静态资源的独立 QPS 曲线 - 搭配 Grafana 面板,可直观查看趋势、同比、异常突增











