【问题标题】:dial tcp: getsockopt: connection refused on local testingdial tcp: getsockopt: 本地测试连接被拒绝
【发布时间】:2018-02-20 22:42:24
【问题描述】:

这几天我一直在使用 k6 在几个不同的环境中对 API 进行负载测试并找出一些错误。

一切都很顺利,直到突然它开始在本地失败。

所有请求都会导致以下错误:

Request Failed error="Get http://localhost:8000: dial tcp [::1]:8000: getsockopt: connection denied"

这只发生在k6;我仍然可以通过浏览器、Postman 和 cURL 成功调用本地 API。

有没有办法从 k6 中获取更多信息并找出它无法再连接的原因?

【问题讨论】:

    标签: k6


    【解决方案1】:

    错误消息表明 localhost 正在解析为 IPv6 地址([::1]:8000 中的 ::1),因此如果您的 API 仅侦听 IPv4 127.0.0.1 但您的 localhost 同时解析为 IPv4 和一个 IPv6 地址(k6 支持两者)然后就可以解释错误。

    如果您查看/etc/hosts 文件,您可能有localhost 的条目,如下所示:

    127.0.0.1       localhost
    ::1             localhost
    fe80::1%lo0     localhost
    

    我不确定为什么 localhost 的查找突然从 IPv4 更改为 IPv6,但可能是其中存在变量 您的系统的地址选择算法(参见 iOS/macOS 的示例 [1],以及更普遍的 [2],Go 的内部解析器在不必通过系统的解析器时使用),它会根据历史记录等内容导致切换TCP RTT(在 [1] 中作为一个因素提到)。

    [1]https://www.ietf.org/mail-archive/web/v6ops/current/msg22455.html
    [2]https://www.rfc-editor.org/rfc/rfc6724

    【讨论】:

      【解决方案2】:

      使用127.0.0.1 代替localhost 将解决您的问题

      【讨论】:

      • 在 K6 上完美地为我工作。
      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 2016-08-18
      相关资源
      最近更新 更多