PassengerMaxRequestsがない
Nginx+PassengerでRailsアプリケーションを動作させたところ、時々サイズの大きなプロセスが生き残ったままになることに気付いた。そのプロセス自体は正常に動作しているものの、という状況である。
アプリケーションに何か問題がある可能性が高いのであるが、すぐにどうこうというのはできない。そのため、当面の回避策として一定期間ごとにプロセスをリフレッシュすることにしようと考えた。
リクエスト処理回数に応じてプロセスを再生成させることができたはず。しかし、そう思ってマニュアルを読み返してみてもそれらしい記述がどうにも見付からない。記憶違いだったかと思いコードをざっと見てみても見付からない。コードの範囲を広げると…… Apache HTTPサーバ向けにはある、なあ。
もう少し調べてみると同じようなことで困っている人はずいぶん前からいたようだ。だがPassengerには今も実装がない。ということはNginxでの事情があるのかもしれない。Passenger自身に制御させることはあきらめて、外部からプロセスをコントロールすることにする。
すると、これもまた同じようなことを考えている人がすぐに見付かった。passengermaxrequests missing - workaroundというスレッドがそれ。ここで紹介されているコードを参考にして一部自作し、cronで定期的に実行するようにした。
半日ほど様子を見ているところでは、どうやらうまく動作しているようだ。今のところリクエスト回数だけで制御しているが、稼働期間でも制御するようにしたほうがよいかもしれない。これはもう少し様子を見て考えよう。