ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Hey与100万结果上限:超大规模压测时report如何截断统计数据

Hey与100万结果上限:超大规模压测时report如何截断统计数据 Hey与100万结果上限超大规模压测时report如何截断统计数据【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/heyhey是一个轻量级的 HTTP 压测工具HTTP load generator常被视为 ApacheBenchab的现代替代品。它支持按请求数、按并发、按 QPS 限速或按时长运行压测任务。当你把压测规模拉到千万级请求时会遇到一个隐藏规则hey 的 report 最多只记录 100 万个请求的详细数据超出部分会被静默截断。本文带你快速搞懂这个 100 万上限在哪里生效、哪些统计受影响、哪些不受影响以及超大规模压测该如何应对。 上限在哪里定义maxRes 1000000这个 100 万上限是一个写死的常量位于报告模块中常量定义requester/report.go 中声明maxRes 1000000注释明确写着 We report for max 1M results最多报告 100 万条结果。结果通道的容量也用了同样的 100 万上限requester/requester.go 中maxResult 1000000用于限制results通道的缓冲区大小。初始化报告时newReport 会用min(n, maxRes)决定各统计数组的预分配容量——也就是说即使你声明了 5000 万请求数组也最多按 100 万准备。✂️ 核心机制哪些数据被截断统计的收口逻辑在 runReporter 中它从结果通道持续消费每个请求的result。这里有一条关键分支if len(r.resLats) maxRes { r.lats append(r.lats, ...) // 其余各阶段耗时、状态码、offset 也一并追加 }翻译成大白话统计数据超过 100 万后原因总请求数numRes✅ 完整累计每条结果无条件自增错误分布errorDist✅ 完整累计错误不进入明细数组RPS每秒请求数✅ 准确由numRes / 总时长计算见 finalize响应时间直方图⚠️ 只基于前 100 万条由r.lats排序生成见 histogram延迟分位数10/25/50/75/90/95/99%⚠️ 只基于前 100 万条见 latencies最快 / 最慢 / 各阶段 Min-Max⚠️ 只基于前 100 万条排序后取首尾值状态码分布⚠️ 只基于前 100 万条statusCodes数组同样被截断CSV 输出⚠️ 最多 100 万行CSV 模板遍历的就是截断后的.Lats还有一个容易忽略的细节平均值r.average r.avgTotal / float64(len(r.lats))见 report.go 第119行。分子avgTotal累计了全部成功请求分母却是截断后的数组长度。当请求数超过 100 万时平均值会略微偏离真实值——这是截断最容易被误解的地方RPS 是全量视角分位数和直方图却是前 100 万条的视角。 为什么要设置 100 万上限原因很直接内存。每个成功请求都要在 7 个float64数组加 1 个int数组中各存一份明细耗时、连接、DNS、写请求、首字节延迟、读响应、状态码、offset。100 万条已需要数百 MB 量级的内存开销若允许千万级请求全量入列压测机本身可能先被内存拖垮。这个上限本质上是用统计精度换内存安全的工程折中。 超大规模压测的实用建议优先按时间切片而不是硬跑一千万。hey 的-z时长模式如-z 10m下内部请求数被设为MaxInt32见 hey.go最容易无意识突破 100 万。建议把长压测拆成多个 100 万以内的段落分别执行最后合并各段报告。看结果时先核对规模如果本次请求数 100 万请记住直方图、P99、最快/最慢这些数字只代表前 100 万个成功请求而 Requests/sec 和错误分布才是全量数据。需要完整明细时用 CSV加-o csv可把逐请求指标导出为逗号分隔流模板见 requester/print.go便于后续在外部工具中做全量分析——同样受 100 万行上限约束需配合切片策略。关注错误不受影响连接失败、超时等错误计数是全量累计的判断系统什么时候开始出错依然可信。✅ 快速自查清单本次压测总请求数是否超过 1,000,000若是是否已将分位数 / 直方图结论标注为前 100 万条样本是否用-z跑长时长任务而未拆分是否导出了 CSV 并确认行数未超上限一句话总结hey 的 report 对计数类统计全量可信对明细类统计最多保留前 100 万条。理解了 requester/report.go 中maxRes这一处逻辑你就能正确解读任何规模的压测报告。更多参数说明可参考 README.md项目入口逻辑在 hey.go压测执行与并发调度见 requester/requester.go。【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表