我正在评估 k6 以满足我的负载测试需求。我已经设置了一个基本的负载测试,我目前正在尝试解释我得到的错误消息和结果值。也许有人可以帮助我解释我所看到的:
如果我将 VUS 调高到 300 左右,我就会开始在控制台中看到错误消息和 500 条错误消息。
这些主要包括:
我也有几个检查的问题:
怎么可以
res.status
是 0 但主体仍然包含正确的值?我怀疑我已达到负载生成机器的连接限制,这就是我收到错误消息的原因。所以我必须建立一个集群或转移到 Cloud runners!?
k6 生成的统计数据显示很长
http_req_blocked
值,我将其解释为等待获取连接端口的时间。这似乎表明我的测试运行机器的连接池已达到极限。http_req_blocked...........: avg=5.66s min=0s med=3.26s max=59.38s p(90)=13.12s p(95)=20.31s
http_req_connecting........: avg=1.85s min=0s med=280.16ms max=24.27s p(90)=4.2s p(95)=9.24s
http_req_duration..........: avg=2.05s min=0s med=496.24ms max=1m0s p(90)=4.7s p(95)=8.39s
http_req_receiving.........: avg=600.94ms min=0s med=82.89µs max=58.8s p(90)=436.95ms p(95)=2.67s
http_req_sending...........: avg=1.42ms min=0s med=35.8µs max=11.76s p(90)=56.22µs p(95)=62.45µs
http_req_tls_handshaking...: avg=3.85s min=0s med=1.78s max=58.49s p(90)=8.93s p(95)=15.81s
http_req_waiting...........: avg=1.45s min=0s med=399.43ms max=1m0s p(90)=3.23s p(95)=5.87s
谁能帮我解释一下我看到的结果?
最佳答案
您可能会在运行器上耗尽 CPU。
如 http specific metrics of the documentation 中所述,你说得对http_req_blocked
它(大部分)是从我们说我们想要制作一个
当我们得到一个套接字来执行它时请求。这很可能是因为:
您将需要监视它们(强烈建议您无论如何都这样做),因为在 100% runner CPU 上的测试可能不太具有代表性:)并且您可能不希望您正在测试的系统也达到 100%。
状态码 === 0 表示我们无法发出请求/读取响应......出于某种原因,通常由
error
解释。和 error_code
.正如我所评论的,如果您有状态代码 0 和正文,这很可能是一个错误……至少我不记得有这种情况不是真的。
您列出的错误意味着(最有可能):
dial tcp XXX:443: i/o timeout
这实际上是我们试图获得 tcp 连接,但花费了太长时间(可能是 http_req_blocking 大的原因)read tcp YYY(local ip):35252->XXX(host ip):443: read: connection reset by peer
另一端关闭了连接 .. 可能是因为达到了一些超时 - 例如,如果我们没有阅读超过 30 秒,服务器决定我们不再阅读并关闭它......并且在 CPU 的情况下100% 很有可能某些连接没有时间被读取。level=warning msg="Request Failed" error="unexpected EOF"
从字面上看,它说的是……当我们完全没有预料到时,连接被关闭了,或者更准确地说是 golang net/http stdlib 没想到。可能再次超时,只是在请求生命周期中没有返回其他错误的时间点。Get https://REQUEST_URL/: context deadline exceeded"
这是因为请求比超时(默认为 60 秒)和 will at some point be changed to a better error message 花费的时间更长.
关于load-testing - 达到更多虚拟用户时 k6 显示的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61076334/