我已经使用k6几天,在几种不同的环境中针对和API进行负载测试,并找出一些错误。
一切进展顺利,直到突然之间它开始在本地失败。
所有请求均导致以下错误:
请求失败错误=“ =” Get
http://localhost:8000:拨号tcp [:: 1]:8000:getsockopt:连接被拒绝“
这仅在k6中发生;我仍然可以通过浏览器,邮递员和cURL成功调用本地API。
有什么方法可以从k6中获取更多信息并弄清楚为什么它无法连接了?
小智 4
错误消息表明正在localhost解析为 IPv6 地址(::1在 中[::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
Run Code Online (Sandbox Code Playgroud)
我不确定为什么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