4. 吞吐量指标定义与测量方法

在 Nginx 进程调度调优中,吞吐量指标是衡量系统处理能力的核心依据。本章明确定义 QPS、并发连接数、响应时间(RT)和吞吐量(Throughput)四个关键指标,并给出标准测量方法。只有准确测量这些指标,才能量化调度器参数调整带来的性能变化。

4.1 核心指标定义

指标 英文全称 定义 典型单位
QPS Queries Per Second 服务器每秒处理的请求数量 req/s
并发连接数 Concurrent Connections 同一时刻服务器保持的 TCP 连接总数 个
响应时间(RT) Response Time 从发送请求到收到完整响应所经过的时间 ms
吞吐量(Throughput) Throughput 单位时间内成功传输的数据量 MB/s 或 Gbps
指标关系提示: 在 Nginx 调优场景中,QPS 和吞吐量是正向指标(越高越好),响应时间是反向指标(越低越好)。并发连接数需要结合系统资源综合评估,并非越高越好。

4.2 指标间的关系模型

四个指标通过 Little's Law 和系统资源约束相互关联。下图展示了 Nginx 处理请求时各指标的流转关系:

吞吐量指标关系模型 吞吐量指标关系模型 客户端请求 并发连接数 QPS(请求/秒) 响应时间(RT) 吞吐量 (Throughput) 核心公式: Little's Law:并发连接数 = QPS × 平均响应时间(RT) 吞吐量(Throughput)= QPS × 平均响应体大小
调优关键: 调度器参数(如 worker_processes、worker_connections)直接影响并发连接数和 QPS 的平衡。当响应时间固定时,提高并发连接数可以线性提升 QPS,但受限于系统资源上限。

4.3 QPS 测量方法

QPS 是最直观的性能指标,测量方法分为主动压测和被动统计两种:

4.3.1 主动压测法

使用压测工具(如 wrk、ab、hey)向 Nginx 发送固定并发数的请求,统计每秒完成的请求数。

# 使用 wrk 进行 30 秒压测,10 个线程,100 个并发连接
wrk -t10 -c100 -d30s http://target-server:8080/

# 输出示例
Running 30s test @ http://target-server:8080/
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    45.23ms   12.45ms 198.00ms   72.45%
    Req/Sec    221.45     28.67   320.00     68.90%
  66250 requests in 30.00s, 52.80MB read
Requests/sec:   2208.33
Transfer/sec:      1.76MB

4.3.2 被动统计法

通过 Nginx 的 stub_status 模块或日志分析工具实时统计 QPS:

# 启用 stub_status 模块(nginx.conf 配置)
location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

# 访问状态页获取数据
$ curl http://127.0.0.1/nginx_status
Active connections: 291 
server accepts handled requests
 16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106 

# QPS 计算:两次采样间隔的 requests 差值 / 时间间隔(秒)
注意事项: 被动统计法受采样间隔影响较大,建议使用 5-10 秒的采样窗口。主动压测时需确保压测工具所在客户端资源充足,避免客户端成为瓶颈。

4.4 并发连接数测量

并发连接数反映 Nginx 同时处理的 TCP 连接数量,是调度器参数调优的直接反馈指标。

测量方式 命令/工具 说明
Nginx 状态页 curl http://127.0.0.1/nginx_status Active connections 字段即为当前并发连接数
ss 命令 ss -s | grep estab 查看系统层面 ESTABLISHED 状态的连接数
netstat 命令 netstat -an | grep :80 | wc -l 统计监听 80 端口的连接总数
压测工具报告 wrk 的 Socket errors 部分 可间接反映连接数是否达到上限
# 使用 ss 命令精确统计 Nginx 进程的并发连接数
# 先获取 Nginx master 进程 PID
$ pidof nginx
12345

# 统计该进程所有 worker 子进程的连接数
$ for pid in $(pgrep -P 12345); do
    echo "Worker PID: $pid, Connections: $(ss -tunp | grep $pid | wc -l)"
  done

4.5 响应时间(RT)测量

响应时间分为平均响应时间、P50/P95/P99 百分位响应时间。在 Nginx 调优中,P99 响应时间比平均值更能反映尾部延迟问题。

4.5.1 百分位响应时间说明

响应时间百分位分布图 响应时间百分位分布示意图 响应时间(ms) 请求数量 P50 P95 P99 P50 = 中位数响应时间 P99 = 99% 请求在此时间内完成

4.5.2 测量命令

# 使用 wrk 的延迟统计功能
wrk -t4 -c200 -d60s --latency http://target-server:8080/

# 输出中的延迟百分位信息
  Latency Distribution
     50%   42.15ms
     75%   58.32ms
     90%   76.89ms
     99%  112.45ms

# 使用 curl 手动测量单次请求响应时间
$ curl -o /dev/null -s -w "Total: %{time_total}s\n" http://target-server:8080/
Total: 0.045s

4.6 吞吐量(Throughput)测量

吞吐量关注的是数据传输速率,而非请求数量。对于 Nginx 静态文件服务或视频流场景,吞吐量比 QPS 更具参考价值。

场景 测量工具 关键指标
静态文件下载 wrk / iperf3 Transfer/sec(MB/s)
视频流媒体 ffmpeg + 自定义脚本 比特率(Mbps)
反向代理 wrk + 日志分析 响应体大小 × QPS
网络层 sar -n DEV 网卡吞吐量(KB/s)
# 使用 wrk 测量吞吐量(关注 Transfer/sec 字段)
wrk -t4 -c100 -d30s http://target-server:8080/largefile.bin

Running 30s test @ http://target-server:8080/largefile.bin
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   120.34ms   45.67ms 450.00ms   68.50%
    Req/Sec     20.50      5.20    35.00     70.00%
  2450 requests in 30.00s, 2.40GB read
Requests/sec:     81.67
Transfer/sec:     81.92MB   <-- 吞吐量指标

# 使用 sar 监控网卡吞吐量
$ sar -n DEV 1 5
Linux 5.10.0  (hostname)     2024-01-15
Average:     IFACE   rxpck/s   txpck/s   rxkB/s   txkB/s
Average:        eth0  4500.00  4200.00  55000.00  48000.00

4.7 综合测量流程

在实际调优过程中,建议按照以下流程进行指标采集:

  1. 基线采集: 在默认调度器参数下,记录 QPS、并发连接数、P99 RT 和吞吐量。
  2. 单变量调整: 每次只修改一个调度器参数(如 worker_processes),重复测量。
  3. 多轮采样: 每个参数组合至少压测 3 次,取中位数作为有效数据。
  4. 关联分析: 绘制 QPS vs 并发连接数、RT vs 吞吐量的散点图,寻找拐点。
综合测量流程 吞吐量指标综合测量流程 步骤1:基线采集 步骤2:参数调整 步骤3:多轮采样 步骤4:关联分析 各步骤详细操作: 1. 基线采集:记录默认参数下的 QPS、并发连接数、P99 RT、吞吐量 2. 参数调整:修改 worker_processes(1→2→4→8→16),每次只改一个变量 3. 多轮采样:每组参数压测 3 次,每次 60 秒,取中位数消除偶然误差 4. 关联分析:绘制 QPS-并发连接数曲线,找到性能拐点对应的参数值 5. 验证确认:在最优参数下再次压测,确认所有指标均优于基线
调优经验: 在 Nginx 调度器参数调优中,QPS 和吞吐量通常同步变化,但当响应时间开始急剧上升时(拐点),继续增加并发连接数反而会降低吞吐量。P99 响应时间超过 200ms 通常意味着系统已过载。