达到更多虚拟用户时 k6 显示的错误

Errors shown by k6 when reaching a bigger number of virtual users

我正在根据我的负载测试需求评估 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 它(大部分)是我们说我们想要制作一个 当我们得到一个套接字时请求。这很可能是因为:

  1. 测试运行器在 CPU 中 运行,无法同时处理所有其他请求和启动新请求
  2. 被测系统在 CPU 中 运行 并且有...同样的问题

您将需要监控它们(强烈建议您无论如何都这样做),因为 100% 跑步者的测试 CPUs 可能不太具有代表性 :) 而且您可能不想要您的系统也在测试以达到 100%。

状态代码 === 0 表示我们无法使 request/read 响应...出于某种原因,通常由 errorerror_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