并发公式
客户给出的指标(「5000 个用户」「支撑 200 TPS」)如何换算为压测配置。 术语定义见基本概念。
这些换算表面是算术问题,但算错的代价很高:得到的不是偏差略大的数字, 而是证据看起来确凿的错误结论——报告明确显示阈值失败、命令返回失败状态, 在客户现场即被解读为系统无法支撑。而实际上系统正常,是压测端配置有误。 本页末尾附一例实测记录。
一、并发用户数 ≠ 吞吐量
两者通过思考时间(用户两次操作之间的停顿)关联:
吞吐量(迭代/秒) = 并发用户数 ÷ 单次迭代耗时(秒)
单次迭代耗时 = 请求耗时之和 + 思考时间
因此「50 个并发用户」对应多少 TPS,取决于单次操作的耗时。 同为 50 个 VU,系统快时吞吐高、系统慢时吞吐低。
load 模型控制的是并发用户数。系统响应变慢时每个 VU 的发起速率随之下降,
压力自动回落,因而始终无法触及系统真实上限,
测得的是受系统自身速度限制的伪平衡点。
客户验收指标为吞吐量时,必须使用 throughput 模型按到达率加压:
速率不随系统变慢而调整,处理不及时则累计 dropped_iterations。
二、到达率 ≠ HTTP RPS
throughput 模型里设的到达率,单位是工作流迭代/秒,不是 HTTP 请求/秒 。
实际 RPS ≈ 到达率 × 各工作流的平均步骤数(按权重加权)
单条链路可含 30 余个 HTTP 步骤(见场景列表), 因此设定 50 迭代/秒可能对应上千 RPS。与客户对齐时须先确认 所称 200 TPS 指 200 个业务操作还是 200 个 HTTP 请求。
混合流量中单个接口仅占全部请求的少数,「整体 500 请求/秒」对应到该接口 可能仅数十 TPS,无法读出按接口设定的验收指标。
收敛至单条链路(仅启用一条单请求链路),到达率即等于该接口的 TPS,无需换算。
三、preAllocatedVUs 的标定
到达率模型下,k6 需要足够多的 VU 才能按时发出请求。VU 不够时它会丢弃迭代,
而 dropped_iterations == 0 正是这个模型的核心判据——
因此 VU 配置过低即判失败,表面看是系统无法支撑目标吞吐量,实际是压测端资源不足。
需要的 VU ≈ 目标到达率 × 单次迭代耗时(秒)
取值方法:从 baseline 或 load 的报告中取 iteration_duration 的 avg 与 p95,
以 avg 计算基准值,再按 p95 预留长尾余量。
一例实测记录
某 dev 环境实测:迭代耗时 avg 1.86 秒、p95 5.2 秒。
| 算法 | 需要的 VU |
|---|---|
| 50 迭代/秒 × 1.86 秒(平均) | ≈ 93 |
| 50 迭代/秒 × 5.2 秒(长尾) | ≈ 261 |
当时 preAllocatedVUs 仅配置为 50,结果为:
- 丢弃 475 次迭代,
dropped_iterations阈值失败、退出码非零; - 但 HTTP 失败率 0.00%、p95 仅 266 ms——系统未受任何影响。
该配置连 30 迭代/秒(需约 56 个 VU)都不足以支撑。
修复方式为将 preAllocatedVUs 提升至 200、maxVUs 提升至 500,
重跑后 dropped_iterations = 0,峰值 VU 为 200,未触及上限。
放宽该阈值会掩盖真实的容量问题。正确做法是配置足量 VU。
出现迭代丢弃时的归因
| 现象 | 结论 |
|---|---|
| 延迟与错误率同时劣化 | 系统确实无法支撑 |
| 延迟与错误率均正常 | 压测端 VU 不足,需调整 preAllocatedVUs |
四、思考时间的影响
thinkTimeSeconds 为两次迭代之间的等待,用于模拟真实操作间隔,直接计入迭代耗时:
load/baseline:默认 1 秒,贴近真实用户节奏;throughput:默认 0——按到达率加压时思考时间无意义, 仅会降低单个 VU 的产能,进而需要更多 VU。
在 load 模型下将思考时间由 1 秒改为 0,等同于提高每个 VU 的发起频率,
实际压力显著高于「并发数未变」的直觉判断。调整前须明确所要模拟的场景。
五、并发数的确定方法
客户给出的通常是注册用户总数,该值不是并发数。
峰值并发 ≈ 峰值同时在线人数 × 活跃系数
活跃系数指在线用户中同一时刻实际发起请求的比例。 用户多数时间处于阅读、思考等非请求状态,实际发起请求的瞬时占比很低。
该系数无通用值,取决于业务形态。可靠的确定方式有三种:
- 由生产监控反推 —— 依据客户现网的峰值 RPS 与平均响应时间反算;
- 由业务量反推 —— 如「每日处理 2 万个工单,80% 集中于 4 小时内」可直接算出峰值速率;
- 先测拐点再商定 —— 以
stress模型测出容量拐点,再与客户确认其业务量是否会达到该水平。
5000 注册用户与 5000 并发相差两到三个数量级。 直接按注册用户数加压,或因配置不足而无法执行,或得出客户永远不会触及的结论。 应先明确口径,再设定目标并发。
六、相关页面
| 内容 | 页面 |
|---|---|
| 各压测模式的默认强度与适用场景 | 压测模式 |
| 指标口径与验收判定 | 性能测试指标 |
| 写入后的检索延迟(另一处易混淆的时间口径) | 索引时长 |