
如何选择正确的并发数 -c利特尔法则在Hey负载测试中的实际应用【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/heyhey 是一款轻量级 HTTP 负载测试工具ApacheBenchab的现代替代品其核心参数并发数-c却是最容易配错的一个设小了压不满服务器设大了会测出假瓶颈。本文用一句话就能讲清的利特尔法则Littles Law手把手教你 3 步算出并验证合理的并发数让每次负载测试的结果都可信。为什么并发数这么重要在 hey 的 hey.go 中-n指定总请求数、-c指定并发 worker 数默认 50 个 worker 跑 200 次请求见 hey.go。程序会启动 C 个 worker 轮流发请求每个 worker 承担 N/C 次requester/requester.go并发太低服务器根本没吃饱测出的 QPS 不代表真实性能并发太高请求在服务端排队响应时间被排队时间污染你会误以为系统很弱。所以-c不是越大越好而是要按目标 QPS 反推。这就是利特尔法则的登场时机。利特尔法则一句话回顾C 目标QPS × 平均响应时间并发数 吞吐量 × 平均响应时间即 L λW。举个例子已知条件数值目标吞吐量500 QPS实测平均响应时间200ms0.2s应设并发数500 × 0.2 100也就是说若想让接口稳定承载 500 QPS而单请求平均耗时 0.2 秒那么系统里同时在飞的请求就是 100 个——这正是 hey 应该设置的-c 100。反过来测试结束后也可以用实测QPS × 平均耗时去核对并发是否被充分利用hey 的 RPS 与 Average 统计见 requester/report.go。3 步选对 Hey 并发数完整操作清单第 1 步低并发测基线延迟先用温和的并发拿一个不排队的基线响应时间hey -n 200 -c 10 https://your-api.com/health记下输出中的 Average平均值与 Latency distribution延迟分布见 requester/print.go。第 2 步用利特尔法则反推 -c确定业务目标 QPS 后直接套公式-c 目标QPS × 基线平均耗时(秒)。 没有明确目标 QPS 时可以用压出拐点法从 10、50、100、200……逐步加大-c观察 QPS 是否线性增长一旦 QPS 不再涨而延迟持续恶化上一档就是合理并发。第 3 步用 -q 限速验证压到精确 QPShey 的-q是每个 worker的 QPS 上限requester/requester.go 中用 ticker 节流总 QPS -q × -c。要精确压 500 QPS可以这样hey -c 100 -q 5 -z 30s https://your-api.com/health注意是100 × 5 500很多人误把-q当成总 QPS这是最常见的坑 ⚠️。如何判断并发数选对了跑完后对照 hey 的 Summary 报告模板见 requester/print.go✅Requests/sec 接近目标值说明并发设置合理利特尔法则成立⚠️P99 远高于 P50并发过高导致排队应下调-c或改用-q限速⚠️QPS 明显低于预期可能瓶颈在压测机本身可用-cpus控制 CPU 核心数或-disable-keepalive排除连接复用带来的偏差。常见错误与最佳实践❌ 错误做法✅ 正确做法拍脑袋-c 1000用C QPS × RT反推-n小于-c会被 hey 直接拒绝见 hey.go保证-n ≥ -c且-n为-c的整数倍固定请求数-n反复测用时长模式-z 30s观察稳定态忽略每 worker 限速语义记住总 QPS -q × -c其他实用细节-t控制单请求超时默认 20s、-H可重复添加自定义请求头、-h2开启 HTTP/2完整参数说明见 README.md 与 Makefile、Dockerfile 中的构建配置。小结记住这条黄金公式即可告别猜并发C 目标 QPS × 平均响应时间秒先用低并发测基线 → 利特尔法则反推-c→ 用-q限速验证三步走通后hey 输出的 QPS、直方图与延迟分布才能真正代表你的系统能扛多少量。下次做 HTTP 负载测试时不妨就把这 3 步当成标准检查清单。【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考