几天来,我一直在使用 k6 在几个不同的环境中对 API 进行负载测试并追踪一些错误。
一切都很顺利,直到突然它开始在本地失败。
所有请求都会导致以下错误:
请求失败错误=“获取
http://localhost:8000
:拨号tcp [::1]:8000:getsockopt:连接被拒绝”
这只发生在k6;我仍然可以通过浏览器、Postman 和 cURL 成功调用本地 API。
有什么方法可以从 k6 中获取更多信息并找出它无法连接的原因吗?
几天来,我一直在使用 k6 在几个不同的环境中对 API 进行负载测试并追踪一些错误。
一切都很顺利,直到突然它开始在本地失败。
所有请求都会导致以下错误:
请求失败错误=“获取
http://localhost:8000
:拨号tcp [::1]:8000:getsockopt:连接被拒绝”
这只发生在k6;我仍然可以通过浏览器、Postman 和 cURL 成功调用本地 API。
有什么方法可以从 k6 中获取更多信息并找出它无法连接的原因吗?
错误消息说localhost
正在解析为 IPv6 地址(::1
in [::1]:8000
),因此如果您的 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
使用127.0.0.1
代替localhost
将解决您的问题