- Passengerプロセスを下記のようにSIGUSR1でkillするとgracefulに停止するみたいなので実験して確認した
- 参照:The Road to Passenger 3: Technology Preview 2 – Stability, robustness, availability, self-healing – Phusion Corporate Blog(公式ドキュメントで記述があまり見つけられなかった)
- passenger-statusコマンドなどでプロセスのメモリ監視して自前でkillする仕組みを作れるかも
- しかし、連続アクセスで500エラーが発生するらしい(Passengerを再起動させると500エラー - Qiita)
- 数値式のkill (kill -10 PIDなど)はOSによって意味がことなるので止めた方が良い
$ kill -SIGUSR1 PID
実験環境
- Amazon Linux 2013.03
- httpd-2.2.25-1.0
- rvm 1.21.6
- ruby 1.9.3p448
- rails 3.2.13
- passenger 4.0.2
実験
- 以下のような処理をするcontrollerを持つ適当なrailsアプリを準備
def test
sleep 30
render :text => "hogehoge"
end
- Apacheとpassengerを設定(passengerの設定としては以下のようにした)
PassengerMaxPoolSize 2
PassengerMinInstances 2
- Webで作成したcontrollerへのパスにアクセスする
- 処理している間にpassenger-statusコマンドでPIDを確認し以下のようにkill(2プロセスとも)
$ kill -SIGUSR1 PID
- 結果
- => Webでhogehogeが返ることを確認
- => passenger-statusでプロセスが2つとも入れ替わることを確認
- => kill -SIGTERMすると途中でInternal Server Error発生