gpt4 book ai didi

ruby - 在 AWS Linux 上增加 RestClient/Net::HTTP 中的 connect(2) 超时

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:26 26 4
gpt4 key购买 nike

我正在使用 rest-client发布到一个非常慢的网络服务。我将 timeout 设置为 600 秒,并且我已经确认它正在传递给 Net::HTTP 的 @read_timeout@open_timeout .

但是,大约两分钟后,我收到一个低级超时错误,Errno::ETIMEDOUT: Connection timed out - connect(2):

回溯的相关部分是

Operation timed out - connect(2) for [myhost] port [myport]
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `initialize'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `open'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `block in connect'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:88:in `block in timeout'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:98:in `call'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:98:in `timeout'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:878:in `connect'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:852:in `start'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:766:in `transmit'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:215:in `execute'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:52:in `execute'

看起来抛出错误的代码行是

TCPSocket.open(conn_address, conn_port, @local_host, @local_port)

似乎底层的 connect(2) 系统调用有大约两分钟的超时时间,传递给 Net::HTTP 的超时参数只能缩短它,而不能延长它。有没有办法修改套接字参数以设置更长的超时时间?

编辑添加:这似乎只是我们的 AWS Linux 服务器上的问题——在我的 MacOS 开发机器上,十分钟的超时有效。我假设默认的 connect() 超时在 MacOS/BSD 上更长,但我真的不知道。

最佳答案

首先,您可以增加 tcp_syn_retries配置更新 /proc/sys/net/ipv4/tcp_syn_retries 文件。引用 here .

如果 if 不起作用,我认为您需要激活 SO_KEEPALIVETCP_USER_TIMEOUT 选项。但在 rest-client 中可能没有相应的接口(interface)。

所以也许你需要做一个 fork 或创建 SocketSocket::Option自己。

Mike Perham 在他的 blog 中写道.

关于ruby - 在 AWS Linux 上增加 RestClient/Net::HTTP 中的 connect(2) 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40600348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com