达到更多虚拟用户时 k6 显示的错误
Errors shown by k6 when reaching a bigger number of virtual users
我正在根据我的负载测试需求评估 k6。我已经设置了一个基本的负载测试,我目前正在尝试解释我得到的错误消息和结果值。也许有人可以帮助我解释我所看到的:
如果我将 VUS 调高到大约 300,我开始在控制台中看到错误消息,并在 500 条错误消息时看到。
这些主要包括:
- 拨号 tcp XXX:443: i/o 超时
- 读取 tcp YYY(本地 ip):35252->XXX(主机 ip):443:读取:对等方重置连接
- 级别=警告消息="Request Failed"错误="unexpected EOF"
- 获取 https://REQUEST_URL/:超出上下文截止时间
我也有几个检查的问题:
- 检查 res.status === 0 和 res.body === null
的错误
- 检查其中 res.status === 0 的错误,但正文包含正确的内容
为什么 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
它(大部分)是我们说我们想要制作一个
当我们得到一个套接字时请求。这很可能是因为:
- 测试运行器在 CPU 中 运行,无法同时处理所有其他请求和启动新请求
- 被测系统在 CPU 中 运行 并且有...同样的问题
您将需要监控它们(强烈建议您无论如何都这样做),因为 100% 跑步者的测试 CPUs 可能不太具有代表性 :) 而且您可能不想要您的系统也在测试以达到 100%。
状态代码 === 0 表示我们无法使 request/read 响应...出于某种原因,通常由 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。
我正在根据我的负载测试需求评估 k6。我已经设置了一个基本的负载测试,我目前正在尝试解释我得到的错误消息和结果值。也许有人可以帮助我解释我所看到的:
如果我将 VUS 调高到大约 300,我开始在控制台中看到错误消息,并在 500 条错误消息时看到。
这些主要包括:
- 拨号 tcp XXX:443: i/o 超时
- 读取 tcp YYY(本地 ip):35252->XXX(主机 ip):443:读取:对等方重置连接
- 级别=警告消息="Request Failed"错误="unexpected EOF"
- 获取 https://REQUEST_URL/:超出上下文截止时间
我也有几个检查的问题:
- 检查 res.status === 0 和 res.body === null 的错误
- 检查其中 res.status === 0 的错误,但正文包含正确的内容
为什么 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
它(大部分)是我们说我们想要制作一个
当我们得到一个套接字时请求。这很可能是因为:
- 测试运行器在 CPU 中 运行,无法同时处理所有其他请求和启动新请求
- 被测系统在 CPU 中 运行 并且有...同样的问题
您将需要监控它们(强烈建议您无论如何都这样做),因为 100% 跑步者的测试 CPUs 可能不太具有代表性 :) 而且您可能不想要您的系统也在测试以达到 100%。
状态代码 === 0 表示我们无法使 request/read 响应...出于某种原因,通常由 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。