0

RainbowsでSinatraアプリを実行しています。私は以下を記録します:

before do
  logger.info("#{Process.pid} #{Time.now} #{request.ip} #{request.path_info} #  {params.to_s}")
end

after do
  logger.info("#{Process.pid} #{Time.now} #{request.ip} #{request.path_info} #{params.to_s} => #{response.headers['X-API-Status']} (#{response.successful?})")
end

そして私のログで私は読むことができます:

25988 2012-11-13 11:57:52 +0100 192.168.90.1 /req {"u"=>"810000027"}
25988 2012-11-13 11:57:59 +0100 192.168.90.1 /req {"u"=>"810000027"} => 200 (true)
192.168.90.1 - - [13/Nov/2012 11:57:59] "POST /req HTTP/1.1" **200** 14 7.5862
25988 2012-11-13 11:57:59 +0100 192.168.90.1 /req {"u"=>"810000027"}
25988 2012-11-13 11:57:59 +0100 192.168.90.1 /req {"u"=>"810000027"} => 200 (true)
192.168.90.1 - - [13/Nov/2012 11:57:59] "POST /req HTTP/1.1" 200 14 0.0223
E, [2012-11-13T11:58:04.099913 #25875] ERROR -- : worker=2 PID:**25988** timeout (12s > 11s), killing
E, [2012-11-13T11:58:04.106428 #25875] ERROR -- : reaped #<Process::Status: pid 25988 SIGKILL (signal 9)> worker=2

私の労働者(pid 25988)は、最初の要求に応答しなかったかのように殺されています...しかし、明らかにそうです!それは別のリクエストも処理しました(そして私は基本同時実行モデルを使用します->同時実行なし)

私のRainbows構成は次のとおりです。

Rainbows! do
 timeout(10) 
end

listen(3000)
pid('/tmp/rainbows.pid')
stderr_path('/var/log/rainbows.log')
stdout_path('/var/log/rainbows.log')
working_directory('/opt/app')
worker_processes(4)

何が起こるかについて何か考えがありますか?または、どうすればさらに調査できますか?ありがとう !

4

1 に答える 1

0

実際、問題は、クライアント(フラッシュ)によって「存続」しすぎたリクエストにありました。どうやらAS3でtcp接続を適切に閉じる方法はありません...

私は次の問題を修正しました:

Rainbows! do
  keepalive_timeout(0)
end

とにかく私には適切だと思います。

于 2012-11-14T14:56:29.423 に答える