拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Hey压测中10种最常遇到的错误及修复办法:error distribution排错速查

Hey压测中10种最常遇到的错误及修复办法error distribution排错速查【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey用hey 压测时最让人头疼的不是压不动而是满屏的报错不知道从哪查起。其实 hey 会把所有请求失败按错误类型聚合成error distribution错误分布输出在报告末尾它就是压测排错的第一现场。本文整理 hey 压测中10 种最常遇到的错误给出每条报错的含义与最快修复办法附带一张可直接对照的速查表帮助新手 3 分钟定位问题。先学会读 hey 的错误报告error distribution 怎么看hey 跑完或中途停止后会输出一份 Summary 报告其中包含两块与错误直接相关的内容报告区块含义排错价值Status code distribution各 HTTP 状态码出现次数如[200] 190 responses发现 4xx/5xx 业务错误Error distribution各错误信息出现次数如[3] dial tcp: ...发现连接、超时等网络层错误两点关键认知只有真正没收到 HTTP 响应的请求才会进入Error distribution收到 502、503 这类成功返回的错误页只会出现在状态码分布里。Error distribution区块仅在有错误时才显示。它的模板位于 requester/print.go统计逻辑在 requester/report.go每遇到一次失败就errorDist[错误文本]所以数字就是该错误的精确发生次数。看到[50] Get https://...: context deadline exceeded这种行先数次数、再按本文下面的速查表定位原因即可覆盖绝大多数场景。10种最常遇到的错误及修复办法一、还没开跑就报错参数类错误这类错误在 hey 启动阶段直接打印并退出校验代码见 hey.go修复起来最快。1.-n and -c cannot be smaller than 1.-n总请求数或-c并发数传了 0、负数甚至空值。修复两者都至少为 1例如hey -n 100 -c 10 url。默认值是-n 200 -c 50直接省略这两个参数即可。2.-n cannot be less than -c.总请求数小于并发数意味着有 worker 分不到任何请求。修复保证-n ≥ -c。比如-c 100时至少写-n 100。3.-c cannot be smaller than 1.使用-z 30s按时长压测时触发的校验时长模式下并发数必须为正。修复加上-c且大于 0例如hey -c 50 -z 30s url。4.could not parse the provided input; input xxx-H请求头或-a认证参数的格式不对。解析规则见 hey.go-H必须是名称: 值形式冒号不能少、不能放中文冒号-H Authorization: Bearer token-a必须是用户名:密码形式-a admin:123456修复检查引号是否成对、冒号是否为英文半角。5.Flag -h is deprecated, please use -H instead.小写-h是旧版加请求头的参数已废弃见 hey.go。修复改用大写-H。另外任何未定义的参数如-m POSTT拼错、-t 20s漏空格都会以flag provided but not defined形式报出对照 README.md 的 Usage 段落核对拼写即可。6.missing protocol scheme或parse xxx: ...类 URL 报错URL 缺少协议头比如直接写了hey example.com:8080/api。修复补全http://或https://。二、跑起来了但大量失败网络连接类错误这类错误会实时计入Error distribution是新手压测内网/测试环境时最常撞见的。7.dial tcp: lookup xxx.com: no such hostDNS 解析失败hey 根本拿不到目标 IP。修复确认域名拼写正确、在压测机上ping或nslookup该域名能通内网域名需要配 hosts 或内网 DNS 时检查压测机的解析配置临时绕开 DNS直接用 IP 压测并配合-host参数补上正确的 Host 头。8.dial tcp 127.0.0.1:8080: connect: connection refusedTCP 连接被拒绝服务没启动、端口不对或防火墙直接 RST。修复先确认目标服务确实监听了对应端口ss -lntp/netstat -anp检查压测机与目标机之间的安全组、iptables 是否放行该端口目标写的是本机 IP 时确认服务没有只绑定在特定网卡上。9.TLS handshake error/remote error: tls: ...HTTPS 场景下握手阶段失败。注意 hey 默认设置了跳过证书校验requester/requester.go 中InsecureSkipVerify: true所以自签证书报错反而少见——常见的真问题是服务端要求客户端证书mTLS而 hey 不提供这类压测场景建议改用支持双向认证的压测方式用了-h2强制 HTTP/2但服务端 ALPN 协商有问题可去掉-h2对比验证。三、压着压着开始报错执行超时类错误10.Get https://...: context deadline exceeded (Client.Timeout exceeded ...)单请求等待响应超过-t秒默认 20s后被强杀超时逻辑见 requester/requester.go。这是高并发压测时Error distribution里的头号角色。修复分两种情况偶发少量目标服务偶发慢查询适当调大-t 60再看分布是否收敛大量出现且错误数随并发线性增长说明服务端已经扛不住当前-c这不是 hey 的错而是压测目标——降低并发找到拐点或扩容后复测。 补充长时间高并发压测偶发too many open files时先调大压测机文件描述符上限ulimit -n 65535再跑否则错误分布会被压测机自身污染。10种错误速查表#错误关键词一句话原因最快修复1cannot be smaller than 1-n/-c传了 0 或负数省略参数用默认值2-n cannot be less than -c请求总数 并发数保证-n ≥ -c3-c cannot be smaller than 1-z模式下并发非法显式传-c ≥ 14could not parse the provided input-H/-a格式不对用英文冒号Name: value5Flag -h is deprecated/not defined参数拼错或用了废弃参数对照 README.md Usage 核对6missing protocol schemeURL 缺http(s)://补全协议头7no such hostDNS 解析失败修 hosts/DNS 或改用 IP -host8connection refused端口没监听/防火墙拦截查服务状态与防火墙规则9TLS handshake errorTLS/HTTP2 协商失败去掉-h2对比、查服务端要求10context deadline exceeded超过-t超时调大-t或降低-c排错实践3个让 error distribution 更可信的小技巧先小后大正式压测前先用hey -n 20 -c 2 -z 5s级别跑一轮冒烟把参数类错误第 1~6 类提前暴露。导出 CSV 留证-o csv会把每个请求的响应时间、DNS/建连/读写耗时、状态码逐行输出列定义见 requester/print.go错误请求的时间点可与其他请求的延迟毛刺互相印证。错误分布 状态码分布一起看Error distribution是 0 但状态码里冒出大量[503]问题在服务端而非网络——别只盯着报错区下结论。把这张速查表存下来下次 hey 压测报错时先找Error distribution里的关键词、再对照上表基本都能在 3 分钟内定位到根因。【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门