質問: * Apache/2.2.15 (Unix) * Phusion Passenger version 4.0.42 * Rails 3.2.18 質問させて頂きたいのはタイトルの通りなのですが、原因がわからず困っています。 apacheのTimeoutは120秒に設定しているのですが、本当に極稀に予期せぬ不具合が発生し、原因を調べてみると、 apacheのアクセスログが > > [19/Nov/2015:07:35:37 +0900] "GET /XXX HTTP/1.1" 200 6 6369825 > > [19/Nov/2015:07:30:34 +0900] "GET /XXX HTTP/1.1" 200 7201 7201738623 > > [19/Nov/2015:09:45:02 +0900] "GET /XXX HTTP/1.1" 200 3 3323601 > > > このようになっており、明らかに120秒を超えているにも関わらずStatusは200を返してしまっています。 Railsの方のログを確認した所,呼ばれたアクションの最初の行のログが下記のようになっています。 > > [2015-11-19 07:35:38] Hoge#fuga called > > [2015-11-19 09:30:34] Hoge#fuga called > > [2015-11-19 09:45:03] Hoge#fuga called > > > となっており、後続の処理も何もなかったかのようにきっちり完了してしまっています。 つまり、07:30にapacheにきた通信が09:30になってから、いきなり何もなかったかのように 正常に処理を行ったようなログになっております。 なぜこのような事が起きたのか?防ぐ手立てはないのか? 些細な事でも構いませんのでご教授願えればと思います。 理想的には、120秒以上経過したリクエストは処理せず500などのエラーステータスを返せれば良いなと考えています。 宜しくお願いします。
回答: Apacheのログを見るとタイムスタンプが入れ替わってますね。 これは、Apacheのログの出力タイミングによるもので Passenger と Rails が遅いのだとわかります。 > > つまり、07:30にapacheにきた通信が09:30になってから、いきなり何もなかったかのよう > > > こういうことではないでしょうか↓ 7:30 apache(A)のリクエストが来た 7:35 apache (B)のリクエストが来た 未明頃 (B) が終了して Apacheが応答を返した → 7:35 のログが出力される 9:30頃 (A) が終了 Apacheが応答を返した → 7:30 のログが出力される Apacheの`Timeout`は リクエストを受ける際のタイムアウトですので 今回のように リクエストを受けてから応答を返すまでが長過ぎる場合はタイムアウトしません。 PassengerかRailsでタイムアウトの設定はできないでしょうか? (コレについてはよくわからないので回答できません。悪しからず。)