6

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

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

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

请求失败错误=“获取http://localhost:8000:拨号tcp [::1]:8000:getsockopt:连接被拒绝”

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

有什么方法可以从 k6 中获取更多信息并找出它无法连接的原因吗?

4

2 回答 2

3

错误消息说localhost正在解析为 IPv6 地址(::1in [::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

于 2018-02-26T15:31:20.320 回答
2

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

于 2018-03-10T14:31:56.863 回答