So-net無料ブログ作成

http.getで無限待ち [Ruby]

以前の記事とほぼ同内容なんだけど,またはまってしまった.覚えられるまで何度でも書く.

24時間稼働させているrubyのプログラムが全く出力を吐かなくなった.process自体は落ちずに生き残っているらしい.straceで確認するとppollで止まっている.
% strace -p 5968
Process 5968 attached
ppoll([{fd=8, events=POLLIN}], 1, NULL, NULL, 
ppollの第2引数がNULLになっているのが良くない.これはTimeout時間をしているものでNULLならばTimeoutなしの無限待ちになる.

RubyのHTTPのget,postでdefaultでTimeoutが設定されていないのが大本.以下のように明示的に指定する.
  url = URI.parse URL
  http = Net::HTTP.new(url.host,url.port)
  http.use_ssl = true if (443==url.port)
  http.open_timeout = 300
  http.read_timeout = 300
  http.ssl_timeout  = 300
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  http.verify_depth = 5
  resp = http.get(url.path)


にほんブログ村 自転車ブログ ブルベへ
にほんブログ村
nice!(1)  コメント(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。