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

标签 load-testing k6

我正在评估 k6 以满足我的负载测试需求。我已经设置了一个基本的负载测试,我目前正在尝试解释我得到的错误消息和结果值。也许有人可以帮助我解释我所看到的:

如果我将 VUS 调高到 300 左右,我就会开始在控制台中看到错误消息和 500 条错误消息。

这些主要包括:

  • 拨号 tcp XXX:443: i/o 超时
  • 读取 tcp YYY(local ip):35252->XXX(host ip):443: 读取:对等方重置连接
  • level=warning msg="请求失败"error="意外的 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% 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/

    相关文章:

    performance - 什么会干扰测试服务器的性能?

    javascript - 是否可以将调试器附加到 k6 脚本?

    javascript - 从 k6 中的文件读取

    performance - 合并两个在不同机器上运行的测试报告的*.jtl文件

    embedded-linux - 如何对现有的Linux应用程序进行压力测试

    load-testing - 具有从数据库生成的动态 URL 的负载/压力测试网站

    amazon-ec2 - 我可以将 Amazon ELB 用于我的 RDS 实例进行负载平衡吗?

    node.js - 如何在 Node.js 中使用 k6

    javascript - 用于创建和填充 k6 指标的函数