非常に遅いWebサービスにPOSTするのにrest-clientを使用しています。私はtimeout
を600秒に設定しており、Net :: HTTPの@read_timeout
と@open_timeout
に渡されていることを確認しました。AWS LinuxでRestClient/Net :: HTTPのconnect(2)タイムアウトを増やす
はしかし、約2分後に、私は低レベルのタイムアウトエラー、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'
ではエラーを投げるコードの行のように見えます基礎となるconnect(2)
システムコールが約2分のタイムアウト、およびタイムアウトパラメータpを持っているかのように思え
TCPSocket.open(conn_address, conn_port, @local_host, @local_port)
ですNet :: HTTPは、それを短くするだけで長くすることはできません。より長いタイムアウトを設定するためにソケットパラメータを変更する方法はありますか?
私のMacOS開発マシンでは、これはAWS Linuxサーバー上で問題が発生しているようですが、10分のタイムアウトが有効です。私はMacOS/BSDでデフォルトのconnect()
タイムアウトが長いと仮定していますが、実際にはわかりません。